我的项目或 Xcode 确实有些问题,两天以来我一直在努力弄清楚发生了什么。
我的应用程序运行得非常好,它是一个 OS X 应用程序,它包含一个 Today Widget 扩展。我最近完成了该项目,现在由于验证错误而无法发布该应用程序。
它始于验证器抱怨我的应用程序组,我用它在主应用程序和小部件扩展之间共享内容。该组被定义为$(TeamIdentifierPrefix)com.acme.GreatApp
。
验证器抱怨我的组名格式错误,应该以我的 TEAMID 开头。绕圈跑了 3 个小时后,我$(TeamIdentifierPrefix)
用我的团队 ID(例如S3F45A5S35.
)替换了占位符——这很奏效。
然后验证器抱怨 myinfo.plist
和 entitlements 文件中的所有其他占位符,$(PRODUCT_NAME)
例如com.acme.GreatApp.$(PRODUCT_NAME:rfc1034identifier)
和$(EXECUTABLE_NAME)
. 我用它们对应的值替换了所有这些占位符,然后被接受了。
然后,有一段时间验证者抱怨结构性问题,这对我来说没有太大意义:
iTunes Store 操作失败。错误的 CFBundleExecutable。在嵌套包 GreatAppWidget [com.acme.GreatApp.pkg/Payload/GreatApp.app/Contents] 属性列表文件中找不到与 CFBundleExecutable 的值匹配的可执行文件
iTunes Store 操作失败。错误的捆绑标识符。应用程序扩展 GreatApp.app/Contents/Plugins/GreatAppWidget.appex 的包标识符“com.acme.GreatApp.GreatAppWidget”应扩展其包含应用程序的包标识符的虚线路径 (com.acme.GreatApp.GreatAppWidget)
你是在告诉我我的扩展包含在我的扩展中吗?
iTunes Store 操作失败。捆绑包位置无效。Bundle GreatApp.app/Contents/Plugins/GreatAppWidget.appex 必须包含在父包的 Contents/Plugins 目录中。
好吧,错误表明我应该做它声称不正确的事情。显然它在父应用程序文件夹Contents/Plugins
中。所以呢?
iTunes Store 操作失败。两个包的 CFBundleExecutable 可能不指向同一个文件。已找到以下共享包路径:GreatApp.app/Contents。
问题是,我的应用程序和扩展程序运行良好。如果有任何东西被破坏,比如依赖关系、路径或其他什么,那么很可能是行不通的,不是吗?
此外,我没有修改任何构建设置或任何我不理解的东西。这些都是默认设置。我创建了一个新的 Cocoa 应用程序,添加了一个新的 Today Widget Extension 作为目标——就是这样。我没有弄乱任何路径、位置、依赖关系等任何东西。
无论如何,这些错误只在一段时间内可见,我很幸运当时我做了一个截图。因为现在,它再次在错误消息中显示原始占位符,即使我没有更改可能导致这种情况的事情。我能记得我做的唯一一件事就是在磁盘、钥匙串和会员中心本地删除/撤销所有配置文件和证书,并通过 Xcode 从头开始创建所有内容。
现在错误如下所示:
iTunes Store 操作失败。错误的 CFBundleExecutable。在嵌套包${bundleName} [ ${bundlePath} ] 属性列表文件中找不到与 CFBundleExecutable 的值匹配的可执行文件
iTunes Store 操作失败。错误的捆绑标识符。应用程序扩展${bundlePath}的包标识符“ ${bundleIdentifier} ”应该扩展其包含应用程序的包标识符的虚线路径(${parentBundleIdentifier})
iTunes Store 操作失败。捆绑包位置无效。捆绑包${bundlePath}必须包含在父捆绑包的${pluginsSubPath}目录中。
iTunes Store 操作失败。两个包的 CFBundleExecutable 可能不指向同一个文件。已找到以下共享包路径:${sharedBundlePath}。
所以我想也许苹果只是在最近的更新中把它搞砸了,你只是无法验证带有扩展名的应用程序。所以我在网上搜索并找到了非常好的示例Today-Scripts。我将应用程序组($(TeamIdentifierPrefix)com.acme.Today-Scripts
,这里的占位符完美地工作)添加到所有目标,激活沙盒,更改证书和配置文件:它完美地验证了!
所以我比较了所有的构建设置等。除了我必须用它们的实际值替换占位符,显然是证书和配置文件,以及在 Today-Scripts 中有一个嵌入到小部件中的额外 XPC 目标的事实,他们在原子上是相同的。每 一个 设置都是一样的。
我清除了所有缓存,真的很难。清理项目,清理~/Library/Developer/Xcode/DerivedData
以及~/Library/Caches/com.apple.dt.Xcode
重新启动几次,没有任何帮助。
我真的很绝望,因为我不知道我能做什么。请有人解释一下 Xcode 在这里做什么以及为什么。
- 是什么导致 Xcode 无法解释
info.plist
和授权文件中的所有占位符? bundle
当我使用 这些错误时怎么会发生- 通过创建新的可可应用程序并添加扩展目标创建的确切设置 XCode?
- 与 Today-Scripts 示例完全相同的设置/依赖项?