Objective-C
Swift
ios11

超古いアプリが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。

スクリーンショット 2017-10-23 18.08.26.png

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

上記で動かない方

その1 Architecture

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

スクリーンショット 2017-10-23 18.15.02.png

その2 Bitcode

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

スクリーンショット 2017-10-23 18.22.18.png
※画像はYESだけどNOにする

その3 許可系

ATS

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

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

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

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

スクリーンショット 2017-10-23 18.42.52.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用のスプラッシュ画像も)
入れなくても申請できるかもなんですが、アーカイブ上げた時にエラーが出るので入れておいたほうが無難です。

スクリーンショット 2017-10-23 18.30.24.png