热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

iOS-watchOS应用发布问题CFBundleIdentifier冲突

如何解决《iOS-watchOS应用发布问题CFBundleIdentifier冲突》经验,为你挑选了2个好方法。

应用上传后,我收到以下电子邮件

我们发现您的应用“ XXX”最近交付时出现了一个或多个问题。请更正以下问题,然后重新上传。

ITMS-90806:CFBundleIdentifier冲突-每个捆绑包必须具有唯一的捆绑包标识符。捆绑包标识符“ org.cocoapods.CocoaLumberjack”用于捆绑包“ [[CocoaLumberjack.framework,CocoaLumberjack.framework]””中

CocoaLumberjack是一个第三方库,我在过去已经使用了很多次而没有任何问题,我很困惑。

它与框架的.plist关键字CFBundlePackageType无关,因为此问题/答案是框架CFBundleIdentifier Collision中指定的。CocoaLumberjack捆绑包的类型为“框架”(CFBundlePackageType = FMWK)。CocoaLumberjack是使用cocoapods添加到我的项目中的广泛使用的第三方库。

该问题可能与我的应用程序包中的watchOS目标有关。CocoaLumberjack库在iOS应用程序和watchOS应用程序中都使用,这引起了有关捆绑标识符重复的问题。

如果iOS目标和Watch Extension之间共享框架,则Apple Connect服务器会检测到CFBundleIdentifier冲突。

target 'App' do
 platform :ios, '9.0'
 # Pods for App
 ...
 pod 'CocoaLumberjack/Swift', '~> 3.5.3'
 ...
end

target 'AppWatch Extension' do
 platform :watchos, '5.0'
 # Pods for Watch Extension
 ...
 pod 'CocoaLumberjack/Swift', '~> 3.5.3'
 ...
end

iOS应用正在使用该库,而watchOS扩展正在使用相同的库。他们使用不同的库,但CocoaLumberjack是两者中唯一的一个。

过去,我已经多次发布我的应用程序,而相同的库配置没有任何问题。我想苹果在最近几天改变了一些关于捆绑标识符的限制。

使用迦太基也存在相同的问题。



1> cristallo..:

作为一种临时的解决方法,我在watchOS扩展中手动重命名了捆绑包标识符,然后应用程序发布可以正常工作,但它看起来不是一个不错的解决方案,尤其是在CI系统上运行构建时。

更好的选择是在pod文件中添加特定的安装后操作:

post_install do |installer|
 installer.pods_project.targets.each do |target|
  if target.name == 'CocoaLumberjack-watchOS'
   target.build_configurations.each do |config|       
    config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = 'org.cocoapods.${PRODUCT_NAME:rfc1034identifier}-$(PLATFORM_NAME)'
   end
  end
 end
end

或者如果您必须处理多个库:

post_install do |installer|
 watchosLibs = ['Lib1-watchOS', 'Lib2-watchOS', 'Lib3-watchOS']
 installer.pods_project.targets.each do |target|
  if watchosLibs.include? target.name
   target.build_configurations.each do |config|
    config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}.${PLATFORM_NAME}"
   end
  end
 end
end

注意重命名pods bundle标识符,因为某些库否则会无法正常工作。

我建议仅重命名Apple拒绝的库,以最大程度地减少可能出现的问题。

当前有一些与此问题有关的开放线程:

在Apple论坛上(当前无可用)

在Cocoapods github项目上

使用迦太基代替可可足类也存在类似的问题

在迦太基github项目上

如果Apple不会更改有关捆绑软件标识符的新政策,那么cocoapods团队可能会提供更干净的解决方案。



2> Tieme..:

显然,Apple更改了验证过程。看起来他们不允许应用程序中的平台特定框架具有相同的标识符。

论坛上也有关于此的帖子:https : //forums.developer.apple.com/thread/122048

如果由于使用Cocoapods而遇到此问题,则可以修补Podfile,以将Platform Name附加到包标识符中,以便它们始终是唯一的(source):

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = 'org.cocoapods.${PRODUCT_NAME:rfc1034identifier}-$(PLATFORM_NAME)'
    end
  end
end

如果您的应用程序中有多个目标,则可以在XCode中更改方案中的watchOS目标,并附.watchos加到标识符。


请注意重命名所有Pod捆绑包标识符,因为某些Pod可能无法正常运行。即:有些人遇到了Firebase的问题,问题在于该脚本已重命名了捆绑软件。我建议仅重命名那些被苹果拒绝的产品。
推荐阅读
author-avatar
骏马奔腾09
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有