昨日の件に引き続き、第2弾です。
Cordova+jQuery Mobile+Backbone.js+自作プラグインいくつかでできたアプリを移植しています。
アプリそのものはお仕事でやっているものなので公開できませんが、作業中に得られたTipsを公開していきます。
wwwディレクトリのお作法変更
現在のCordova CLI(&Cordova iOS 4.0)で作成したプロジェクトでは、wwwディレクトリがplatforms/ios/wwwではなく、Cordovaプロジェクト直下のwwwを指すようになっています。
一方で、Xcodeでのビルド時はplatforms/ios/wwwを使うので、Xcodeでビルドする際には都度、cordova prepareコマンドを実行しなければなりません。(cordova buildコマンドを使う場合は自動的にprepareも行われるので問題ない)
CordovaアプリをiOSでしかビルドしなくて、Xcodeで作業したい場合は、Xcodeが指すwwwディレクトリをplatforms/ios/wwwに変更しておくと良いでしょう。(プロジェクトに既存のwwwを削除して、platforms/ios/wwwを追加)
Cordovaプロジェクト直下のwwwディレクトリには、cordova.jsやcordova_plugins.jsが存在しませんが、platforms/ios/wwwには存在します。
Headerが被る問題は引き続き要対応
2013年9月のiOS 7公開時から問題になっている、PhoneGap + jQuery Mobile + iOS SDK7で起きるステータスバー問題に対応するの件は、引き続き対応が必要です。
対応が必要なのは、CordovaLib.xcodeproj内のPublic/CDVViewController.mのcreateGapViewです。記述内容は以前と同様です。
Application Transport Security(ATS)に対応する
Cordova iOS 4.0の正式リリース版になればATS問題にも対応するようですが、2015年9月20日時点のソースでは、まだその対応が入っていません。
そのため、自分でInfo.plistを編集して、ATSに対応する必要があります。(一応、ここではATS無効にする)
NSAppTransportSecurity
NSAllowsArbitraryLoads
CORS問題が起きる
国際化対応のために、i18nextというJavaScriptのフレームワークを使っています。
i18nextは翻訳ファイルをwww/locales/ja/translation.jsonから取得するようになっているのですが、ここでCORS問題が起きてしまいます。
この問題については、今回のアプリでも使用しているcordova-plugin-wkwebview-engineプラグインのサイトでも警告されています。
In iOS 9, Apple has fixed the issue present through iOS 8 where you cannot load locale files using file://, and must resort to using a local webserver. However, you are still not able to use XHR from the file:// protocol without CORS enabled on your server.
Cordova iOS 4.0の開発者のブログでも、
Apple has fixed the bug where we couldn’t load documents from file:// urls, and it is iOS 9 only.
となっていて、少なくともiOS 9ではAppleがfixed the bugしたと書いてあるのですが、いまのところ私のやり方では正常に動作しません。
解決方法を探っているところではありますが、まだ見つからないのが現状。
やはり、Cordova iOS 4.0の正式リリースを待つしかないのか。。。
次回に続く
まだまだ解決には至りませんが、引き続き調査したいと思います。
ただ、CORS問題が解決しないと、www配下のファイルにfile://でアクセスできないということになるので、i18nextに限らず影響が出そう。
参ったな。。。