📌

Flutterのある機能がApp Store Connectに怒られてだめだった話

2024/11/26に公開

以前、【Flutter 3.16】Share Extensionの画面をFlutterで作り、プラグインを呼ぶという記事を書いて、ローカルでなんとかShareExtension(共有のところで出るやつ)上でFlutterを動作させる方法について書きました。

しかしながら、実際にこれを用いて共有機能をFlutterで作成し、デプロイすることはかないませんでした。

怒られる

この方法を用いて実際にアプリをApp Store Connectにアップロードしようとすると、弾かれます。

[12:47:20]: ERROR: [ContentDelivery.Uploader] Asset validation failed (90685) CFBundleIdentifier Collision. There is more than one bundle with the CFBundleIdentifier value 'io.flutter.flutter' under the iOS application 'Runner.app'. (ID: f582435e-d88b-4c06-b5c5-b352dc36ce77)

[12:47:20]: ERROR: [ContentDelivery.Uploader] Asset validation failed (90205) Invalid Bundle. The bundle at 'Runner.app/PlugIns/ShareExtension.appex' contains disallowed nested bundles. (ID: cd37d2c2-f040-47aa-8ff7-b9a14e1995e2)

[12:47:20]: ERROR: [ContentDelivery.Uploader] Asset validation failed (90206) Invalid Bundle. The bundle at 'Runner.app/PlugIns/ShareExtension.appex' contains disallowed file 'Frameworks'. (ID: b375fe87-809e-449a-aa16-bf1a3be19938)

[12:47:20]: Error uploading '/var/folders/q5/6nls1_g145s2fl1lbvx2zby40000gn/T/62cf73d3-1128-457c-9036-038927d29be4.ipa'.

[12:47:20]: Asset validation failed CFBundleIdentifier Collision. There is more than one bundle with the CFBundleIdentifier value 'io.flutter.flutter' under the iOS application 'Runner.app'. (ID: f582435e-d88b-4c06-b5c5-b352dc36ce77) (90685)

[12:47:20]: Asset validation failed Invalid Bundle. The bundle at 'Runner.app/PlugIns/ShareExtension.appex' contains disallowed nested bundles. (ID: cd37d2c2-f040-47aa-8ff7-b9a14e1995e2) (90205)

[12:47:20]: Asset validation failed Invalid Bundle. The bundle at 'Runner.app/PlugIns/ShareExtension.appex' contains disallowed file 'Frameworks'. (ID: b375fe87-809e-449a-aa16-bf1a3be19938) (90206)

[12:47:20]: The call to the altool completed with a non-zero exit status: 1. This indicates a failure.
[12:47:20]: Could not download/upload from App Store Connect!

特にThe bundle at 'Runner.app/PlugIns/ShareExtension.appex' contains disallowed nested bundles.The bundle at 'Runner.app/PlugIns/ShareExtension.appex' contains disallowed file 'Frameworks' の部分ですね。Flutter.xcframeworkを入れるなと明確にエラーにしてきています。

そういうわけで、ローカルでは動作させることができるものの、App Store Connectにはアップロードできなかったというわけです。

https://github.com/shiosyakeyakini-info/miria/commit/155f0be4fe637895153571cb2c990526ae1e4aef

そもそも…

Misskeyは非常にリッチな体験をクライアント側に要求します。たとえば本文中の大量のAPNGの絵文字を正確に描画するとか(現にSafariでも無理ですね)。数千個、へたすれば数万個のカスタム絵文字の中から選択させるとか。
カスタム絵文字はMisskeyのクライアントアプリとして最重要要件のひとつですが、そもそもそんな仕様をShareExtensionでFlutterまで乗せてノートの作成画面に実現できるかというと無理です。リアクションピッカーはともかく、プレビューですら厳しいでしょう。Extensionの制約を大幅に上回りクラッシュします。

仕様面でももともとかなりの妥協をしなければならなかったので(そして使う側はあれもこれもと貪欲なので)、諦めて正解だったのかもしれない…と思いました。

Discussion