ラベル Xcode の投稿を表示しています。 すべての投稿を表示
ラベル Xcode の投稿を表示しています。 すべての投稿を表示

2015年10月7日水曜日

iOS9のATS絡みの審査とリジェクトについて

Zメンです。iOSの開発に関するあれこれを書いていきます。



■iOS9で出てきたATSってなに?


iOS9が出てから(っていうか出る前から)開発者の間でATS絡みの話題が結構出てますね。
ATS自体はいまさら感がありますが、結局審査の時どうなるの?というところが意外と触れられてないです。
ちなみにATSはAppTransportSecurityの略ですね。


簡単に言うと
「今後アプリでの通信は全てHTTPSが推奨ですから!」
「HTTPで通信しようとしたらHTTPSに強制変換しますから!!」
な話です。


これが結構曲者な感じで、
HTTPSといっても『あれね、SSLね』ではなくて、具体的には
 ○TLS バージョン 1.2 以上
 ○接続時に使用できる暗号スイートに制限がある
 ○サーバ証明書に制限がある
   ・SHA256 以上のフィンガープリント
   ・2048 ビット以上の RSA キー、もしくは 256 ビット以上のECCキー
   ・無効な証明書を使用した場合は強制的に失敗になり、接続できない
な条件があります。


なので使用しているサーバーの環境によってそもそも対応できないよ!てことが普通にあるかと。
運営しているサイトがでかければでかいほどこのへんの変更は時間かかりそうですね。



■ATSの暫定対応(非推奨)


先に公開されてる対応方法だけ書いておきます。
といってもいろんなところで既に書かれまくっているので
こことかここ
とか参考にしてもらったほうが早いです。
『iOS ATS』でわんさか出てきます。



■懸念点と審査・リジェクト


今回の仕様変更の影響範囲は通信全てなので、
NSURLConnectionAFNetworkingみたいなAPI通信以外にも
UIWebViewだとかWKWebViewのようなWEBページ表示もしっかり影響範囲です。



大手でもまだまだWebViewベースでアプリを作ってるところもあるなかで、
この仕様変更は結構きついなーと。

一応HTTPSで動作確認はしましたが、
 ・CDN使ってるとこ
 ・広告表示してるとこ・
 ・オーディエンスデータとってるとこ
などなどがほんとに動作保障しきれるのか?とかなり不安です。
一部通信エラーっぽいログとか出てたし。(ログはかなり不親切)


なので jQueryみたいなCDNのはまだいいとして、個々の広告業者なんかは
しらみつぶしに検証するとかほんと時間の無駄。


クックパッド開発者ブログ
さすがcookpadさん、この辺も言及されてますね。


で、本題のそもそもATSを無効にした場合、
とくにWebView使ってて NSAllowsArbitraryLoadsで設定を切らざるを得ない場合、
はたして審査は通過するのか、ということです。


このあたりは丁度審査中なので追って追記します。
2015.10.08 追記)
審査無事通過しました。
ドメインを個別に指定する方法でも、BOOL値切替でもどちらでも
今のところ審査には支障はないみたいです。



ちなみに、審査通ったからと言ってHTTPSとか考慮しないし、
という訳ではなく、iOSX?以降で必須にされる場合ももちろんあるだろうし、
Appleに対してすべての通信がSecureであるよ、とちゃんと伝える意味でも
早めにATSに準拠したかたちに修正するのが望ましいでしょうね。



参考)Apple Developer 公式ドキュメント


2015年9月25日金曜日

複数台のMacでiOSアプリを開発する方法

こんにちは。
旧iOS担当です。色々あって今は開発してませんが、その昔困ったときの話をします。

開発をしていて、メンバーが増えた―とか、取引先が増えた―とかMac新調した―

とかいうときに、複数台のMacを使って開発するケースがあります。

今は当たり前かもしれませんが、昔証明書あたりもあまり詳しく解説されておらず
ビルドするときどうしようとか配布はどうしようとか悩んだことがあります。

解決方法はとても簡単なんですけど。



これ、各々で普通にXcode開いて開発始めてしまうと、provisioningprofileを共有出来ないんですね。
だから同じソースを共有していてもビルド時に『なんかわかんないけどこらー!』とか、そもそも『provisioningprofileねーよ!』みたいな怒られ方をします。
こんなときにprovisioningprofileをシェアすればいいんでしょ、と思うかもしれませんが
それじゃダメです。
※今はXcodeが勝手にprofileを落としてくるのでそもそも共有とかすらしないかもですが

で、検証の時に何とかしようと思って放置しておくと、後でidentifierが違うとか大元のソースとなんか構成変わってるとか、
どんどんドツボにはまっていってしまいます。

で、じゃあどうするのかというと、
最初に証明書を共有しておけばOKです。
証明書というとザックリしてますが、iOSDevCenterで作ったアプリ公開用の証明書ですね。
これが各Macに入っていれば、『このMacはこのアプリ開発に使っていい端末ですよー』という証明になります。
その証明があれば、配布やリリースなんかも出来るわけですね。
provisioningprofileも証明書に紐付いているので、これをしないと共有出来ないです。



で、肝心の証明書の共有方法を簡単に。
①まずこれまでリリースに使っていたMacを起動します。
 (リリースしたことない場合はまずはリリース方法から勉強してください)
②Macでキーチェーンアクセスを開きます
③そこにアプリ配布用の証明書がいるハズです。
④証明書の『‣』ボタンを押すと、鍵が表示されます
⑤証明書と鍵を両方選択した状態で右クリック(Macではなんて言うんだ・・・)
⑥書き出しを選択し、OK⇒OK⇒書き出しみたいな感じで書き出す
⑦パスワード付き(無でもいける)の.p12ファイルが出来上がるハズです。
⑧この.p12ファイルを別のMacに渡します
⑨別のMacで.p12ファイルを開き、⑦のパスワードを入力します
⑩キーチェーンアクセスを起動
⑪証明書が入っていること、鍵も一緒についていることを確認します。
※よくあるのが鍵がついていないケースです(‣これ)鍵が無いと証明書として機能しませんのでご注意

 但し、これらは注意が必要で、①のように必ず親となるMacが必要です。
証明書作成・管理用の親Macを決めておいて必ずそこから配布するようにしてください。

 以上です。意外と簡単なことで済みます。

5分で出来る、cocoapodsインストール

神ツールと名高いcocoapodsですが、これまでなかなか導入に踏み切れませんでした。

最近では個人開発のライブラリから有名どころのSDKまでなんでもそろっている訳で。

どんなのがあるのか興味がある方はこちら。

https://cocoapods.org/



導入しなかった理由はただなんとなくだったんですけど、

・・・思い切って導入してみっか!とこれまたなんとなく思ったわけで。

半分気分ですね。

で、導入した感想は、「あ、これ5分で出来るじゃん。簡単」です。

なぜもっと早くやらなかった・・・。



そしてライブラリの管理楽すぎすごい。楽しい。なんかありがとう。



そんなcocoapodsの導入方法ですが、簡単にまとめます。

①macのターミナル開く

②魔法の呪文その1「sudo gem install cocoapods」

③魔法の呪文その2「pod setup」

④プロジェクトのディレクトリにPodfileを設置(空のテキスト置いてCmd+Iで拡張子いじると簡単)

⑤ターミナルでプロジェクトのディレクトリに移動し「pod install」と唱える!!



簡単です。簡単すぎてなんでもかんでも入れすぎないように注意。

ちなみに、ビルドするときは「BaseSDK」と「BuildActiveArchitectureOnly」という

罠が二つ潜んでいるので注意。