我が家のXcode8対応での修正点たち、Archieveまで

# 修正概要
とにかく・・・・とにかくビルドがしたいんだ・・・対応しなきゃいけないアプリが幾つかあるんだ・・・

とにかくXcode8 Beta6 + iOS10実機で確認！
何も考えずビルドしてもエラーの嵐。

こらあかん・・・Swift3.0対応したいけど後方互換もないのでとりあえず

> Swift2.3で動くことを目指す

いい機会だったのでWidget追加したり、Speech対応してみた話は別途書きます。

## 軽微な修正点たち
### Optionalになったものども
- NSURLのabsoluteString
- UIGraphicsGetCurrentContext()
[Swifty importing of C functions](https://www.hackingwithswift.com/swift3)

### Mailのcomponents
MFMailComposeResultSavedはEnumでrawValueではチェックしてたけど
MFMailComposeResult.Savedみたいにアクセスできるようになった。

### Storyboard
言わずもがな、こんなのがついて今までのようにAnyAnyでチェックするのではなく、CRなどで見ることになった。視覚的で嬉しいが、最初に表示するサイズを選択したら幾つかレイアウトがずれたりしてた。

![スクリーンショット 2016-09-07 15.58.13.png](https://qiita-image-store.s3.amazonaws.com/0/31237/d13942e0-3fe4-9513-ec82-e31845a848bb.png)

これを選んだことが原因かな、でもdiffを見る限りUpdate Layoutすれば治る misplaced="YES" 系のものばかりなので別原因かもしれない・・・
![スクリーンショット 2016-09-07 15.59.14.png](https://qiita-image-store.s3.amazonaws.com/0/31237/6b7097d3-31bc-6219-7635-fa723951ab03.png)


だいたい1pxくらい横幅が足りない現象などが起きてた・・・謎だけど修正した。

あとViewDidLoadでAutolayout指定しているsubsviewのboundsを利用して、Viewを作ったりしている部分があったけど、そこでViewサイズがおかしい部分があった。これはなんでか謎・・・


## 各種プライバシーデータへのアクセス
[[iOS 10] 各種ユーザーデータへアクセスする目的を記述することが必須になるようです](http://dev.classmethod.jp/smartphone/iphone/ios10-privacy-data-purpose-description/)

これは対応しないとクラッシュするのでまずいです。
カメラやカレンダー、フォトライブラリやホームキットなどほとんど全部ちゃんと書かないとダメですね。

## 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で設定しているとリンクエラーが出ていました。
![スクリーンショット 2016-09-07 18.49.02.png](https://qiita-image-store.s3.amazonaws.com/0/31237/24e3a113-c0ca-bc4b-7bb5-389eb5e12f71.png)

Noneにしたほうがいいという記事も結構見ますが、とりあえずこれで進めてみます

# Xcode8 Beta6の使用感

- San Fransiscoは馴染まない
- Xcode8でPluginが使えないの辛い・・・コンソールが一色になってしまった
    - 一部使えるそうです・・・
    
http://dealforest.hatenablog.com/entry/2016/06/24/172056

- やっぱまだクラッシュする、Schemeいじるとすぐクラッシュする
- 参照エラーが出てはMacを再起動している
- コメントアウトできない
    - これはこちらをぜひ
     
https://twitter.com/dealforest/status/771335148415561728


- Swift3がツラミある
- 新機能はCallKitやSiriがかなり期待と違って悲しい・・・
    - 早く電話とかsiriで色々できるようになってほしい
- tvOS3はシングルサインオンが期待だが詳細が謎い
- watchOS3は期待してない

Speechを試した感じ、結構いい反面使い方にテクニックがあるので[このへん](https://tech.rarejob.co.jp/)で書こうと思います

という感じで色々調べたりして、実機で動かしたりして幾つかのアプリの対応を3日くらいで一段落させた。
さて、次はGMでテストだ！！！！！


4sがシミュレーターリストにない・・・
代わりにセブンが！！

<img width="281" alt="スクリーンショット 2016-09-08 10.45.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/31237/d8fe7866-9011-864d-ed30-7711160b9679.png">

# Archieveで手こずる
Archiveしてはエラーで繰り返してここまできた。
<img width="226" alt="スクリーンショット 2016-09-08 22.40.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/31237/207a2bc4-6436-c091-d5d7-613997ad2974.png">


なるほどわからん。
<img width="575" alt="スクリーンショット 2016-09-08 12.44.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/31237/2c38c826-4b2d-6a82-9892-5a912ce89e5b.png">

Application uploaderを使ってみたらちゃんとエラーが出た。

```
Invalid Swift Support - The files libswiftDarwin.dylib...
```

さらにいくつか試しているうちに以下のエラーにも遭遇した。

```
ITMS-90205, IMTS-206
```
これはもうわからん。。。。
とやってたけど結局

1. App Targetは**ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES**を**YES**
（こちら @yimajo さんにご指摘いただきでソースないのプロパティをYESに修正しました）
2. Widgetは**NO**
3. 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して、もう一度試したらイケたぁ