热门标签 | 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开发环境中,特别是在Xcode 6.1中,设置和应用自定义文本样式。我们将详细介绍实现方法,并提供一些实用的技巧。 ... [详细]
  • 如何使用Ionic3框架创建首个混合开发应用
    混合开发是指结合原生(Native)与网页(Web)技术进行移动应用开发的方法。本文将详细介绍如何利用Ionic3这一流行的混合开发框架,从环境搭建到创建并运行首个应用的全过程。 ... [详细]
  • 在使用 iOS 应用时,遇到网络请求错误是常见的问题。本文将探讨两种常见的错误代码 -1003 和 -1001,并提供详细的解释和解决方案。 ... [详细]
  • 本教程旨在指导开发者如何在Mac上设置React Native的开发环境,以进行iOS应用的开发。文中详细介绍了必要的软件安装步骤,包括Xcode、Homebrew、Node.js、Watchman以及React Native CLI等工具的安装方法。 ... [详细]
  • iOS中UITabBar与UINavigationController的集成及样式自定义
    探讨如何在iOS开发中有效结合UITabBarController和UINavigationController,并实现自定义样式。项目源码已托管至GitHub:https://github.com/zcsoft/ZCTabNav ... [详细]
  • 本文档提供了在iOS开发中使用OClint进行静态代码分析的详细步骤,包括安装、更新和使用方法,以及相关资源链接。 ... [详细]
  • 本文总结了在使用React Native开发过程中遇到的一些常见问题及其解决方法,包括配置错误、依赖问题和特定组件的使用技巧。 ... [详细]
  • 在现代移动应用开发中,尤其是iOS应用,处理来自服务器的JSON数据是一项基本技能。无论是使用Swift还是PHP,有效地解析和利用JSON数据对于提升用户体验至关重要。本文将探讨如何在Swift中优雅地处理JSON,以及PHP中处理JSON的一些技巧。 ... [详细]
  • 万事起于配置开发环境
    万事起于配置开发环境 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 本文详细介绍了Git分布式版本控制系统中远程仓库的概念和操作方法。通过具体案例,帮助读者更好地理解和掌握如何高效管理代码库。 ... [详细]
  • 作为一名在大型手机游戏公司工作的程序员,尽管主要负责游戏逻辑和内容的开发,但对iOS底层开发接触较少。现在有了iPhone和可以虚拟MAC环境的电脑,希望能找到有效的iOS开发学习路径。 ... [详细]
  • 本文探讨了如何在字符串中无条件地将一个值替换为另一个值,即使原值不断变化。例如,无论原始值是2、4还是5,都能将其成功替换。 ... [详细]
  • 本文介绍了iOS应用开发的主要框架,包括Foundation、UIKit、CoreData及CoreGraphics等,并探讨了开发iOS应用所需的硬件和软件环境,以及推荐的编程语言。 ... [详细]
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社区 版权所有