热门标签 | 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的问题,问题在于该脚本已重命名了捆绑软件。我建议仅重命名那些被苹果拒绝的产品。
推荐阅读
  • 我的iOS开发入门自学路径
    我有一个清单,列着希望在大学里完成的事。比如,学一门乐器,和朋友去旅游,搭建自己的博客,去滑翔,看各主题的书籍。其中一项是,写自己的App并且上架。去年开始,我准备完成这一项,所以 ... [详细]
  • imnewtotheswiftandxcodeworld,soimhavingaproblemtryingtointegrateapackagetomypro ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  •   源码地址:https:github.comfzhleeSwiftUI-Guide当点击按钮时,弹出Modl模态窗口。示例代码:structContentView:View{@S ... [详细]
  • 最近在使用cocoapods的时候,当输入podinit的时候,iOS项目目录中没有出现对应的Podfile文件.问题描述:使用podinit出现badinterpreter:No ... [详细]
  • 在应用开发中少不了界面元素的布局、适配、自适应。之前苹果已经为我们提供了 AutoLayout 和 SizeClasses,方便我们实现页面的自适应弹性布局。但对于一些复杂的交互界 ... [详细]
  • Objective C接入Sonar代码扫描
    目录技术方案环境准备扫描器配置项目配置SonarQube配置jenkins接入一些坑技术方案Sonar本身有对OC的代码扫描插件——SonarCFamily,但是是收费的。出于成本 ... [详细]
  • iOS推送手机消息的技术背后的奥秘揭示
    作者:allenzzhao,腾讯IEG运营开发工程师消息推送我们几乎每天都会用到,但你知道iOS中的消息推送是如何实现的吗?本文将从推送权限申请,到本地和远程消息推送, ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了预加载多个本地WebView相关的知识,希望对你有一定的参考价值。 ... [详细]
  • ios中级面试题(二)
    1.如何追踪app崩溃率,如何解决线上闪退当iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上。crash日志上有很多有用的信息,比如每个正在执行线程的 ... [详细]
  • 运行就报对我有效的解决方法是:把真机和模拟器需要的文件手动加入其中,具体请参考网络上提供的其他解决方 ... [详细]
  • 2015年iOS测试现状
    本文由伯乐在线-nathanw翻译,dopcn校稿。未经许可,禁止转载!英文出处:www.mokacoding.com。欢迎加入翻译小组。几周前,我决定将将我在mokacoding ... [详细]
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社区 版权所有