修正概要
とにかく・・・・とにかくビルドがしたいんだ・・・対応しなきゃいけないアプリが幾つかあるんだ・・・
とにかくXcode8 Beta6 + iOS10実機で確認!
何も考えずビルドしてもエラーの嵐。
こらあかん・・・Swift3.0対応したいけど後方互換もないのでとりあえず
Swift2.3で動くことを目指す
いい機会だったのでWidget追加したり、Speech対応してみた話は別途書きます。
軽微な修正点たち
Optionalになったものども
- NSURLのabsoluteString
- UIGraphicsGetCurrentContext()
Swifty importing of C functions
Mailのcomponents
MFMailComposeResultSavedはEnumでrawValueではチェックしてたけど
MFMailComposeResult.Savedみたいにアクセスできるようになった。
Storyboard
言わずもがな、こんなのがついて今までのようにAnyAnyでチェックするのではなく、CRなどで見ることになった。視覚的で嬉しいが、最初に表示するサイズを選択したら幾つかレイアウトがずれたりしてた。
これを選んだことが原因かな、でもdiffを見る限りUpdate Layoutすれば治る misplaced="YES" 系のものばかりなので別原因かもしれない・・・
だいたい1pxくらい横幅が足りない現象などが起きてた・・・謎だけど修正した。
あとViewDidLoadでAutolayout指定しているsubsviewのboundsを利用して、Viewを作ったりしている部分があったけど、そこでViewサイズがおかしい部分があった。これはなんでか謎・・・
各種プライバシーデータへのアクセス
[iOS 10] 各種ユーザーデータへアクセスする目的を記述することが必須になるようです
これは対応しないとクラッシュするのでまずいです。
カメラやカレンダー、フォトライブラリやホームキットなどほとんど全部ちゃんと書かないとダメですね。
Cocoapods
以下の変更を入れた、podsで利用するSwiftのversionを変える。
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = "2.3"
config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'NO'
end
end
end
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESというのはXcode8でDeprecatedになった、EMBEDDED_CONTENT_CONTAINS_SWIFTの代わり
https://github.com/CocoaPods/CocoaPods/issues/4203#issuecomment-147550871
あとはそれぞれのライブラリの対応ブランチを入れるようにする、例えばAlamofireならこう、いつ対応になるかわからないので暫定。
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :branch => 'swift2.3'
- Alamofire
- KeychainAccess
は対応ブランチを指定しました、SwiftDateに関しては対応パッケージがなく特定のメソッドのリネームが必要だったので、自分で修正したブランチを用意しました。
optimization
ObjCのリンクエラーが結構出ていて全く謎だったんですが、Optimization Levelを変更して無事Archieveできました。-whole-module-optimizationで設定しているとリンクエラーが出ていました。
Noneにしたほうがいいという記事も結構見ますが、とりあえずこれで進めてみます
Xcode8 Beta6の使用感
- San Fransiscoは馴染まない
- Xcode8でPluginが使えないの辛い・・・コンソールが一色になってしまった
- 一部使えるそうです・・・
- やっぱまだクラッシュする、Schemeいじるとすぐクラッシュする
- 参照エラーが出てはMacを再起動している
- コメントアウトできない
- これはこちらをぜひ
- Swift3がツラミある
- 新機能はCallKitやSiriがかなり期待と違って悲しい・・・
- 早く電話とかsiriで色々できるようになってほしい
- tvOS3はシングルサインオンが期待だが詳細が謎い
- watchOS3は期待してない
Speechを試した感じ、結構いい反面使い方にテクニックがあるのでこのへんで書こうと思います
という感じで色々調べたりして、実機で動かしたりして幾つかのアプリの対応を3日くらいで一段落させた。
さて、次はGMでテストだ!!!!!
4sがシミュレーターリストにない・・・
代わりにセブンが!!
Archieveで手こずる
Application uploaderを使ってみたらちゃんとエラーが出た。
Invalid Swift Support - The files libswiftDarwin.dylib...
さらにいくつか試しているうちに以下のエラーにも遭遇した。
ITMS-90205, IMTS-206
これはもうわからん。。。。
とやってたけど結局
- App TargetはALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESをYES
(こちら @yimajo さんにご指摘いただきでソースないのプロパティをYESに修正しました) - WidgetはNO
- podfileは以下
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = ""
config.build_settings['CODE_SIGNING_REQUIRED'] = "NO"
config.build_settings['CODE_SIGNING_ALLOWED'] = "NO"
config.build_settings['ENABLE_BITCODE'] = 'NO'
config.build_settings['SWIFT_VERSION'] = "2.3"
config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'YES'
end
end
end
*なぜかitunesconnectに上げた後に以下がで続けてた。写真にアクセスなんてしてないんだが・・・・
フォーラムを見ているとどうやらpodで入れているやつにその気配があれば入れねばいけない説がある・・・
https://forums.developer.apple.com/thread/62229
たしかに使わないけど入れたら通った。謎
Dear developer,
We have discovered one or more issues with your recent delivery for "アプリ名-". To process your delivery, the following issues must be corrected:
This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.
Embeded pods Frameworksを消してみたり、Archieve内のFrameworksをいじったりしていたけど、いらんかった。
無事TestFlightでも確認できた!!ヨッシャー!!!
と思った矢先一回修正して上げなおしたら
*** has conflicting provisioning settings. *** is automatically signed, but code signing identity iPhone Distribution: **** has been manually specified. Set the code signing identity value to "iPhone Developer" in the build settings editor, or switch to manual signing in the project editor.
Code signing is required for product type 'App Extension' in SDK 'iOS 10.0'
??????
いきなりどうしたこいつ・・・と思ったけど言われるがままにCode SigningのAny iOS SDKのとこをDeveloperにした。あとdeveloper portalみたらプロファイルがなぜかinvalidになってたので、再度generateして、もう一度試したらイケたぁ