如何证明我的 Xamarin.iOS Watch 应用程序启用了位码?

How can I prove that my Xamarin.iOS Watch app has bitcode enabled?

我接到 Apple 代表打来的电话,告诉我我的带有 WatchOS 扩展的应用程序没有编译 Bitcode 支持,如果我尝试提交进一步的更新,他们将被拒绝。

这是一个 Xamarin.iOS 应用程序。我正在使用 Visual Studio 2017 15.8.2、Xamarin.iOS 11.14.0.14 和 XCode 9.4.1.

据我所知,Bitcode 已经在我的 WatchOS 项目中启用了一段时间,我的印象是如果不是这样的话我现在已经被拒绝了(最近的更新是不到 4 周前)。

在 WatchOS 和 WatchOS Extension 项目中,我的 AppStore 构建有以下项目选项:

<MtouchUseLlvm>True</MtouchUseLlvm>
<MtouchEnableBitcode>True</MtouchEnableBitcode>

我不知道如何证明在生成的二进制文件中确实启用了 Bitcode。我试过使用 otool:

$ otool -l MyApp.ipa/Payload/MyApp.app/Watch/MyAppWatch.app/MyAppWatch | grep bitcode

(no output)

$ otool -l MyApp.ipa/Payload/MyApp.app/Watch/MyAppWatch.app/MyAppWatch | grep __LLVM

(no output)

$ otool -l MyApp.ipa/Payload/MyApp.app/Watch/MyAppWatch.app/MyAppWatch/PlugIns/MyAppWatchExtension.appex/MyAppWatchExtension | grep bitcode

(no output)

$ otool -l MyApp.ipa/Payload/MyApp.app/Watch/MyAppWatch.app/MyAppWatch/PlugIns/MyAppWatchExtension.appex/MyAppWatchExtension | grep __LLVM

segname __LLVM
segname __LLVM

所以看起来 Watch Extension 项目启用了 LLVM,但没有任何迹象表明启用了 Bitcode。 Watch 项目本身没有任何迹象,但我不确定这是否重要。

我已经尝试使用应用程序上传器提交一个新的二进制文件并且没有遇到任何问题,但我担心我会在审查过程中遭到拒绝,我想在到达那个点之前或在至少能够保护自己免受拒绝。

编辑:我已经提交了带有手表扩展的应用程序,使用上述相同的工具进行编译,并获得了应用程序商店的批准,尽管苹果公司打来了警告电话。我已将我的工具集更新为 Xamarin.iOS 12 和 XCode 10,并订购了 Apple Watch 4。我将让这个问题悬而未决,看看问题是否变得更加明显(并且 Apple 警告更加合法)新工具集。

参见https://github.com/xamarin/xamarin-macios/issues/4810。有一种解决方法可以将 Xamarin watchOS 应用程序提交到商店。此脚本编辑了我的扩展 Info.plist:

/usr/libexec/PlistBuddy -c 'Add :DTPlatformBuild string "15T212"' Info.plist
/usr/libexec/PlistBuddy -c 'Add :DTPlatformVersion string "4.3"' Info.plist
/usr/libexec/PlistBuddy -c 'Add :DTSDKBuild string "15T212"' Info.plist
/usr/libexec/PlistBuddy -c 'Add :DTSDKName string "watchos4.3"' Info.plist
/usr/libexec/PlistBuddy -c 'Add :DTXcode string "0940"' Info.plist
/usr/libexec/PlistBuddy -c 'Add :DTXcodeBuild string "9F1027a"' Info.plist

目前仅支持 watchOS 4.3 :-(.