超古いアプリがiOS11で急にアプリが起動できなくなったら(64bit 対応とかいろいろ)

急に会社の人から
「iOS11になったら〇〇アプリが動かなくなったんだがなんとかしろ」
と言われたので、最後にビルドしたのが何年前(3年前ぐらいかな)なのかわからないアプリをビルドできるようにしました。

# ビルドできなくなった理由
基本的に、起動できなくなった理由は64bit対応だと思います。
iOS11から64bit対応していないアプリは起動できなくなったっぽい。
(アプリを起動すると、最新版をストアから落としてね！みたいな固定文言が出て落ちたような気がします)
※未だに64bit対応していないアプリが64bit対応だけで申請できるようになるほどAppleは甘くありません。

参考
http://sbapp.net/appnews/app/upinfo/ios11/32bit-67893

# 早速64bit対応
ちゃんとやりたい人は以下参照
https://developer.apple.com/jp/documentation/CocoaTouch64BitGuide.pdf

---

Project　→　[Build Settings]　→　[Architectures]　→　[Valid Architecture] にarm64を追加。
左(上)から armv7 armv7s arm64 になっていたらOK。

<img width="1111" alt="スクリーンショット 2017-10-23 18.08.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/70276/c71002bf-fffb-383c-efc7-047150bd7b57.png">

適当に調べると上で終わりのところが多かったのですが、それだけでは動かなかったので、動かない人は以下参照。

# 上記で動かない方

## その１ Architecture

Project　→　[Build Settings]　→　[Architectures]　→　[Architecture] を **Standard architecture...**に変更。
※元々は `$(ARCHS_STANDARD_32_BIT) - $` みたいな感じになってました。たぶんこのままだと32bitビルドになりますのでiOS11でビルドできません。

<img width="1095" alt="スクリーンショット 2017-10-23 18.15.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/70276/87e5f9e2-b2cc-ca56-741b-dfb6932a4275.png">

## その２ Bitcode

Project　→　[Build Settings]　→　[Build options]　→　[Enable Bitcode] を NO　に変更。
※YESでもちゃんと設定したり、使ってなかったりするとYESでも大丈夫かもしれません。めんどくさいのでNOで。

<img width="870" alt="スクリーンショット 2017-10-23 18.22.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/70276/2c3d8726-4735-ce34-3816-df541b62007e.png">
※画像はYESだけどNOにする

## その3 許可系

### ATS

もう説明不要でしょうが、iOS9から追加されたATSを無効にしましょう。
※できればちゃんと対応してほしいが、広告とか入れているアプリはどうせ無効にするので...
参考
https://qiita.com/tonkotsuboy_com/items/9c056b4b2b1ffb85615e

### カメラとか写真（PhotoLibrary）とか音楽とかマイクとか...を使っている場合

iOS10から許可をとらないといけないです。
※ビルドはできるが実行時に落ちるので注意

カメラだったらKeyは、`Privacy - Camera Usage Description` です。
Valueに書いた内容がアラートに表示されます。

<img width="1103" alt="スクリーンショット 2017-10-23 18.42.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/70276/e6d81fb7-95ad-4191-dfb8-e6b1c60f0b56.png">

>
|	|対象となる操作|	対応するキー|
| --- | --- | --- |
|1	|メディアライブラリへのアクセス|	NSAppleMusicUsageDescription|
|2	|Bluetooth インターフェースへのアクセス|	NSBluetoothPeripheralUsageDescription|
|3	|カレンダーへのアクセス|	NSCalendarsUsageDescription|
|4	|カメラへのアクセス|	NSCameraUsageDescription|
|5	|連絡先へのアクセス|	NSContactsUsageDescription|
|6	|ヘルスデータへのアクセス|	NSHealthShareUsageDescription|
|7	|ヘルスデータの変更|	NSHealthUpdateUsageDescription|
|8	|HomeKit の設定データへのアクセス|	NSHomeKitUsageDescription|
|9	|位置情報へのアクセス (常に許可)|	NSLocationAlwaysUsageDescription|
|10	|位置情報へのアクセス (使用中のみ許可)|	NSLocationWhenInUseUsageDescription|
|11	|マイクへのアクセス|	NSMicrophoneUsageDescription|
|12	|加速度計へのアクセス|	NSMotionUsageDescription|
|13	|フォトライブラリへのアクセス|	NSPhotoLibraryUsageDescription|
|14	|リマインダーへのアクセス|	NSRemindersUsageDescription|
|15	|Siri へユーザーデータ送信|	NSSiriUsageDescription|
|16	|Speech Recognition Server へのユーザーデータ送信|	NSSpeechRecognitionUsageDescription|
引用：[iOS 10] 各種ユーザーデータへアクセスする目的を記述することが必須になるようです
https://dev.classmethod.jp/smartphone/iphone/ios10-privacy-data-purpose-description/

# 最後に

最後に1024 * 1024　のアプリアイコンを用意して入れましょう。(余裕があればiPhoneX用のスプラッシュ画像も)
入れなくても申請できるかもなんですが、アーカイブ上げた時にエラーが出るので入れておいたほうが無難です。

<img width="1083" alt="スクリーンショット 2017-10-23 18.30.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/70276/be5dee76-c5fa-23c0-e6c4-df4e48f8b788.png">