更新仅限 watchOS 的应用 "generated iOS" plist?
Update watchOS-only app "generated iOS" plist?
TL;DR 如何更新生成的 watchOS-only iOS plist 文件?
watchOS-only 应用程序默认有 3 个目标:WatchKit 应用程序、WatchKit 扩展和看起来像主包的东西,类似于 "fake" iOS 应用程序,可能需要分发。
在构建步骤中,您可以清楚地看到主要 "TeslaPulse" 目标是一个 iOS 目标,并且是 WatchKit 应用程序和 WatchKit 扩展的父包(有点像非 watchOS -仅限应用程序)。
这个主要 iOS 目标有一个步骤可以做到这一点:
ProcessInfoPlistFile /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Products/Debug-iphoneos/TeslaPulse.app/Info.plist /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Intermediates.noindex/TeslaPulse.build/Debug-iphoneos/TeslaPulse.build/empty.plist (in target 'TeslaPulse' from project 'TeslaPulse')
cd /Users/vince/Documents/TeslaPulse
builtin-infoPlistUtility /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Intermediates.noindex/TeslaPulse.build/Debug-iphoneos/TeslaPulse.build/empty.plist -producttype com.apple.product-type.application.watchapp2-container -genpkginfo /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Products/Debug-iphoneos/TeslaPulse.app/PkgInfo -expandbuildsettings -format binary -platform iphoneos -additionalcontentfile /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Intermediates.noindex/TeslaPulse.build/Debug-iphoneos/TeslaPulse.build/Base.lproj/LaunchScreen-SBPartialInfo.plist -additionalcontentfile /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Intermediates.noindex/TeslaPulse.build/Debug-iphoneos/TeslaPulse.build/assetcatalog_generated_info.plist -additionalcontentfile /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Intermediates.noindex/TeslaPulse.build/Debug-iphoneos/TeslaPulse.build/ProductTypeInfoPlistAdditions.plist -requiredArchitecture arm64 -o /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Products/Debug-iphoneos/TeslaPulse.app/Info.plist
那是生成那个主要目标的Info.plist。
问题:如何更改 plist 以具有额外的密钥?
这是必需的,因为 https://forums.developer.apple.com/message/405719#405719 为了使您的应用可供内部用户使用 TestFlight,您需要以某种方式显式添加 ITSAppUsesNonExemptEncryption
键。
尽管对于像我这样的仅限 watchOS 的应用程序,我发现解决该问题的唯一技巧是在生成存档后手动更改生成的 plist。
遇到同样的问题,您应该可以将密钥添加到主WatchApp中。但是 iTunesConnect 正在检查手表应用程序,就像它们捆绑在 iPhone 应用程序中一样:
ERROR: ERROR ITMS-90363: "Invalid Info.plist key. The key 'ITSAppUsesNonExemptEncryption' in bundle Boiler.app/Watch/WatchKit App.app is invalid."
我找到了一个很好的解决方案,只需为虚拟目标创建一个 info.plist!那将被合并而不是empty.plist!不要忘记 INFOPLIST_FILE
虚拟目标的构建设置。 (来源:https://forums.developer.apple.com/thread/122660)
TL;DR 如何更新生成的 watchOS-only iOS plist 文件?
watchOS-only 应用程序默认有 3 个目标:WatchKit 应用程序、WatchKit 扩展和看起来像主包的东西,类似于 "fake" iOS 应用程序,可能需要分发。
在构建步骤中,您可以清楚地看到主要 "TeslaPulse" 目标是一个 iOS 目标,并且是 WatchKit 应用程序和 WatchKit 扩展的父包(有点像非 watchOS -仅限应用程序)。
这个主要 iOS 目标有一个步骤可以做到这一点:
ProcessInfoPlistFile /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Products/Debug-iphoneos/TeslaPulse.app/Info.plist /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Intermediates.noindex/TeslaPulse.build/Debug-iphoneos/TeslaPulse.build/empty.plist (in target 'TeslaPulse' from project 'TeslaPulse')
cd /Users/vince/Documents/TeslaPulse
builtin-infoPlistUtility /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Intermediates.noindex/TeslaPulse.build/Debug-iphoneos/TeslaPulse.build/empty.plist -producttype com.apple.product-type.application.watchapp2-container -genpkginfo /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Products/Debug-iphoneos/TeslaPulse.app/PkgInfo -expandbuildsettings -format binary -platform iphoneos -additionalcontentfile /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Intermediates.noindex/TeslaPulse.build/Debug-iphoneos/TeslaPulse.build/Base.lproj/LaunchScreen-SBPartialInfo.plist -additionalcontentfile /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Intermediates.noindex/TeslaPulse.build/Debug-iphoneos/TeslaPulse.build/assetcatalog_generated_info.plist -additionalcontentfile /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Intermediates.noindex/TeslaPulse.build/Debug-iphoneos/TeslaPulse.build/ProductTypeInfoPlistAdditions.plist -requiredArchitecture arm64 -o /Users/vince/Library/Developer/Xcode/DerivedData/TeslaPulse-dotmlbmrjsjjgggixtbkfceylkfa/Build/Products/Debug-iphoneos/TeslaPulse.app/Info.plist
那是生成那个主要目标的Info.plist。
问题:如何更改 plist 以具有额外的密钥?
这是必需的,因为 https://forums.developer.apple.com/message/405719#405719 为了使您的应用可供内部用户使用 TestFlight,您需要以某种方式显式添加 ITSAppUsesNonExemptEncryption
键。
尽管对于像我这样的仅限 watchOS 的应用程序,我发现解决该问题的唯一技巧是在生成存档后手动更改生成的 plist。
遇到同样的问题,您应该可以将密钥添加到主WatchApp中。但是 iTunesConnect 正在检查手表应用程序,就像它们捆绑在 iPhone 应用程序中一样:
ERROR: ERROR ITMS-90363: "Invalid Info.plist key. The key 'ITSAppUsesNonExemptEncryption' in bundle Boiler.app/Watch/WatchKit App.app is invalid."
我找到了一个很好的解决方案,只需为虚拟目标创建一个 info.plist!那将被合并而不是empty.plist!不要忘记 INFOPLIST_FILE
虚拟目标的构建设置。 (来源:https://forums.developer.apple.com/thread/122660)