[Xcode]Xcode 9.2 で iOS 8.x をサポートする場合の注意点

Xcode9.2でDeployment targetをiOS8.0にして開発をしているのですけれど、
その際2つの注意点があったので、どこぞの誰かが同じ轍を踏まないように。。。
(2つはめっちゃ連動してるので1つともいえるけども...)

Xcode9.2でDevelopment targetをiOS8.xで開発するときの注意点

です。

Xcode v9.2

Xcode9.2のバグ

まずは1つめ。
Xcodeのバグなのですけれど...具体的にはAsset Catalogのバグらしい。
これはリリースノートにもちゃんと書かれています。
Asset CatalogのところのKnown Issuesのとこです。

When using Xcode 9.2 to create apps that deploy to iOS 8 and later, images in the asset catalog may be corrupted when viewed on devices running iOS 8.3 and earlier. (35379713)

iOS8以降をターゲットにしてデプロイするとアセットカタログが壊れる。
may beってとこがやっかいですけど...100%ではないんです(笑)
実際これに遭遇してしまって、どうなるかというとAssetCatalogに入れている画像を表示させると、すごくおかしく表示されます。
元の画像がなにかすら判別ができないほどに...
(urlからロードした画像は大丈夫。Asset Catalogのバグなので)

対応・回避策

可能性と言われても...起きてしまった状態を目の当たりにしちゃうとどうにかしないと...と思うわけですが、
先のリリースノートには続きが合って、回避策が書かれています

Workaround: Build the app using Xcode 9.1, or use Xcode 9.2 and set the deployment target to iOS 8.4 or later.

  • Xcode9.1でビルドする
  • Xcode9.2のままDevelopment targetを8.4にする
  • Xcode9.2のままDevelopment targetを9以降にする

(2つめと3つめはやることは同じなのですけれど、インパクトが違うので分けてます)

いままで9.2で開発してるのにいきなり9.1にするのもなんか嫌です。
かといって、Development targetを8.xから9.xにするのは難しいです(ビジネス的に?上を説得するのに(笑))
ということで、8.4にすることを選ぶのは割りと自然な流れだと思います。
実際、これで発生したことはないですし、回避できると思って良さそう。

XcodeのIPA転送の仕様

Development target8.4を対象にすることで上記バグを回避しつつ開発を続け、いざリリースとなりarchiveをしsubmitをします...。
すると...エラーが...

Invalid Bundle. Submitting asset catalogs targeting iOS 8.3 or iOS 8.4 is currently unsupported. You’ll either need to change the deployment target back to iOS 8.2 (or lower), or move it forward to iOS 9.0 or later.

😇

すごくないですか...?(笑)
Xcode9.2のバグを回避するために記載されている対応をしたら、こんどはサブミット時にそれが原因で弾かれるのです。
サブミットできない回避策とは一体....

どうしたのか...
結局Xcode9.1にしてarchive等々することになりました。
本当はDevelopment targetを9.0にしたいですけどね...(開発的な意味合いからも(笑)
Xcodeがサポートから外してしまえば説得押し切れるきがするので、もうカバーしきれていないし是非外してほしいです、🍎さん!

Asset Catalogのバグを回避するには実質2つ

ということで、実質2つです。

  • Xcode9.1でビルドする
  • Xcode9.2のままDevelopment targetを9.0以降にする

個人アプリなら即決で後者ですが...仕事の場合はどうですかね。。。
説得を試みる方にご武運を!(笑)

追記(2018.05.15)

Xcode v9.3 だと Asset Catalog のバグに遭遇したことないので、修正されたかもしれません。
リリースノートにそんな記述ないので、もしかするとたまたまなのかもしれませんが...😅
v9.3 でも発生した!っていうの遭遇した方は是非ご一報を🙏