iPhone(シミュレータ)でweb表示してみる

アプリケーションでウェブ表示をしてみます。

 

web表示では以下の3つの手段があるみたいです。

  • UIWebView
  • WKWebView
  • SFSafariViewController

 

UIWebViewは現状、完全な非推奨ではないみたいですがWKWebViewのドキュメントにも"使わないで"と書いており、WKWebVIew は iOS8.0から使用できるので、こちらで実装してみます。

WKWebView - WebKit | Apple Developer Documentation

 

storyboardにWebKit Viewを設置

f:id:mtntmyk:20171103200151p:plain

せっかくなので3つ設置してみました。

 

そしてテスト用にiOS 8.0 and Laterに変更

f:id:mtntmyk:20171103200519p:plain

 

するとエラーが!

f:id:mtntmyk:20171103200433p:plain

 

Safe Area Layout Guide before iOS 9.0

こちらの方は原因が簡単でした。

single viewで新規作成したstoryboardは下記の設定が入っているので、このチェックを外せばエラーは消えます。

f:id:mtntmyk:20171103200823p:plain

 

Use Safe Area Layout Guides って?

本題から外れますが気になったので調べました。

iPhoneXには画面の作りが独特で上の方に凹んだ部分がありますね。

f:id:mtntmyk:20171103201359p:plain

この部分はセーフエリアと呼ばれていて、自動的に調節してくれるのが Use Safe Area Layout Guidesです。

ただしこの設定はiOS9.0以上でないと利用できない設定なので、ビルド設定をiOS8.0に変更したのでエラーになりました。

 

class unavailable

利用できない・・・?

調べてみると WKWebView を Interface Builder で使用するには iOS11.0以降ではないと現状エラーになるとのこと。

WKWebView: build fail for iOS 10.2. XCode9 beta 6 | Apple Developer Forums

WKWebKitさえいればそれでいい。 // Speaker Deck

 

なので Interface Builder を利用せずにソースコードで書いてみます。

まずは Apple DeveloperDocument にあるサンプルソースを参考に書いてみます。

WKWebView - WebKit | Apple Developer Documentation 

 

シミュレータで動いた!

f:id:mtntmyk:20171104124745p:plain

 

簡単に動かせるサンプルがあるっていいですね!

TomcatとApacheの連携?

前ブログの再掲

TomcatApacheの連携させることがあります。

TomcatにもWebサーバ機能があるのになぜApacheと連携させるのか? 」が不明だったので調べました。

  • Tomcatサーブレットコンテナがメインであり、Webサーバの機能は開発などのデバッグなどで使用されることを想定に作られたので、WebサーバとしてはApacheには劣る。
  • Webサーバは静的なコンテンツ(画像など)を大量に処理をするのに向いており、そういった処理が多いページではApacheの方が便利。

 

次の疑問

「 では静的コンテンツが少ないページならTomcatだけで良い?」

  • 1台のApacheサーバから複数のTomcatへ処理の分散が可能で処理効率を良くすることができ、1つのTomcatが落ちても別のTomcatで処理を続行可能なのでクライアント側での操作に問題が起きにくい。
  • Apacheならアクセス制御などセキュリティという点で優れている。 というかTomcat単体で動作させる場合は管理画面を誰からでも表示できる(パスワードのセキュリティはあるが管理画面の表示自体がセキュリティ上問題)
  • ApacheTomcatより豊富な機能追加のモジュールが用意されている。

 

さらに疑問

「ではTomcat単体よりApacheを連携させる方が良いのか?」

  • Tomcat単体で動かすより動的コンテンツの処理が低速になる場合がある
  • TomcatApacheの2つを使うことでセキュリティホールが多くなる可能性がある
  • 構築が手間(らしい)

 

以上を踏まえてまとめると
  • Tomcat単体でサーバ構築する場合は社内サーバなどアクセスが限られて大規模では無い場合に向いている。
  • ユーザに向けて公開するサーバ構築にTomcatを使用するならApacheと連携させることはほぼ必須。

TomcatとApache

前ブログの再掲

Apache Tomcat

最初Tomcatをダウンロードできるページが”Apache Tomcat”ってなっててTomcat内にApacheが入っているのかと思いました。
Apacheソフトウェア財団っていう非営利団体が作っているからこういう名前なんですね。

 
ApacheTomcatは別物でそれぞれの正式名称は以下の通りでした。

TomcatApacheの違い

 

サーブレットコンテナ
  • クライアント側からの要求に対して効率良くサーブレットを動かすのに必要。
  • サーバではないが、Tomcatの場合はWebサーバの機能も持っているのでTomcatのみでWebサーバを構築出来る。

 

webサーバソフト
  • クライアント側からの要求されたページの表示などを行う。
  • 画像表示などの処理は得意だが、複雑な処理を行う場合は処理効率が悪い。

 

サーブレットとは
  • Webサーバ用のJavaプログラム

「優秀なプログラマー」でググった

結構記事が出てきたので、リンク貼っておきます。

 

 

あとちょっと違うけど

 

ざっとまとめると、良い開発者になるには以下の三つ

  • 開発を続けること
  • 続ける内容自体を見直し、改善していくこと
  • 体と心も大切に

xibファイルとnibファイルは同じもの?

iphoneipadアプリの画面作成について調べていて分かり難かったので、記事にします。

 

結論から書くと…

基本的に"nib"と"xib"は同じ。

で良いと思います。

 

なぜ言い方が別れているの?

ここからもう少し詳細に書いていきます。

 
xibファイルって?

XcodeiPhoneiPadアプリ開発する時の画面作成使われるファイルです。

xibファイル、もしくはstoryboardファイルを使って画面を作成することが多いのではないかと思います。

nibファイルって?

画面作成についてxibファイルで検索していると

xibファイルとnibファイルが同じか類似したファイルとして読める記事が見つかりました。

じゃあnibファイルはxibファイルなの?

ですが別物として発言している人もいらっしゃったので、気になって調べてみました。

そもそもnibファイルとは。

NeXT Step(OS)に付属するInterface Builderというアプリケーションで作成されたファイルがnibファイル(NeXTStep Interface Builderの略)です。

元々はProject Builderという開発環境でソースコードを書いて、UIをInterface Builderで書いていていました。

nibファイルからxibファイルに。

Project Builder と Interface Builder を兼ねた開発環境が Xcodeです。

ファイル名もnibファイルからxibファイル(Xcode Interface Builder)に変わりました。

なぜ同じものとして扱うのか。

なぜでしょうね。

nibファイルはバイナリファイルでxibファイルはXMLファイルなので、別物だと思うのですが、これという結論は出ませんでした。

予測すると…

  • 元がnibファイルだった名残でxibファイルと呼んでいる
  • appleのDocument読んでいたらxibファイルを指す文がnibファイルと書かれていることもあるから 例:UINib - UIKit | Apple Developer Documentation
  • nibファイルとxibファイルには別の意味があり、私が勘違いをしている

のいずれかかと思います。

余談

「storyboardはxibの画面遷移を分かりやすくしたもの」という考えで間違っていないはずなので、storyboardをnibと呼ぶ人もいると思います。

Xcodeで新規プロジェクト作成時に自動生成されるファイルって?

初期に作成した時に作成されるファイルって何なの?

 

って事が気になってざっくりと調べたのでメモ

 

"Single View App" で作成

f:id:mtntmyk:20171030215608p:plain

 

 

"NewPJ1"という名前で作成しました

"Single View App"で作成すると以下のファイルが自動的に作成されます。

f:id:mtntmyk:20171030215623p:plain 

 

各処理について

[NewPJ1]

AppDelegate.swift

 アプリの起動時やアプリ終了時の処理などをここに書く

ViewController.swift

 Main.storyboardを表示したらあるViewController(画面)

 1画面につき、ViewControllerファイルを一つが主流?

Main.stroyboard

 アプリケーションの画面。

 storyboardが用意されているが .xib などでも画面を作成できる。

Assets.xcassets

 アセットカタログ。

 アイコンや画面に表示する画像を管理できる。

LaunchScreen.storyboard

 スプラッシュ画面(起動時の画面)

 Main.storyboardで良い場合、GeneralLaunch Screnn Fileからスプラッシュ画面をMain.storyboardに変更できる。

Info.plist

 アプリの共通の設定ファイル。

 バージョン情報やステータスバーなど設定できる。

NewPJ1.xcdatamodeld

 CoreDataモデルオブジェクトを扱うためのフレームワーク)らしいです。

 

[NewPJ1Tests]

NewPJ1Test.swift

 ユニットテストのファイルかな

Info.plist

 ユニットテストの設定ファイルのはず

 

[NewPJ1UItests]

NewPJ1UITests.swift

 UI関連のユニットテスト用だと思う 
Info.plist

 UIテストの設定ファイルかな


[Products]

NewPJ1.app

NewPJ1Tests.xctest

NewPJ1UITests.xctest

 上記ファイルはプロジェクトをビルドした時の最終的な成果物らしい

 以下のリンク先を参考

framework - swift SwiftChartsframeworkが赤字だけどimportできる? - スタック・オーバーフロー

 

だとすれば"NewPJ1.app"がアプリケーション本体で、"~.xctest"がそれぞれユニットテストのファイルのはず。