我的应用程序的开发配置文件已于几周前过期,因此我访问了配置门户以获取全新的配置。获得它后,我访问了Xcode Organizer,从我的设备和Mac中删除了过期的配置文件,然后导入了新的配置文件。 Xcode立即将配置文件安装到我的设备上,我的应用程序再次在设备上运行。
问题在于,虽然管理器能够看到新配置文件并正常安装,但IDE会在旧配置文件和新配置文件之间混淆。每次我尝试构建应用程序时,它都会立即失败。错误控制台告诉我Xcode找不到旧配置文件,因为列出的GUID属于旧配置文件。真奇怪;我认为Xcode现在已经意识到了新的配置文件。
我尝试从我的设备和Mac中删除新配置文件,然后重新安装配置文件。不起作用,Xcode仍然试图寻找旧的。我也试过选择一个不同的配置文件让Xcode忘记旧的,然后选择新的。我甚至尝试在其他选项中手动输入新GUID的GUID。然而,Xcode仍然坚持寻找旧的配置文件,现在它已经从我的Mac上消失了。
如何说服Xcode我为我的应用生成了新的配置文件以供其使用?
答案 0 :(得分:17)
tl; dr:结果我只需手动编辑项目文件,告诉Xcode新的配置文件。现在,我不知道为什么我必须手动更新项目文件。也许我在将新配置文件导入Xcode的过程中做错了,所以它没有意识到我的新配置文件已经进入。或者文件系统中途窒息而Xcode无法自行更新。哦,好吧。
现在为 fun 技术部分:
重要提示:与其他涉及修改文件的内容一样,您不应修改:请务必备份
.xcodeproj
捆绑包和/或整个Xcode项目,或确保您的Xcode项目保持适当的版本控制。你不想搞砸并导致Xcode停止在你的设备上构建你的项目,没有任何东西可以依赖。
我偷看了我应用的.xcodeproj
包的内容(此时Xcode没有运行)。要查看这些内容,请在Finder中打开项目文件夹,然后按住Control并单击.xcodeproj
文件,然后选择显示包内容:
Breeze.xcodeproj/ Daniel.mode1v3 Daniel.pbxuser project.pbxproj
然后在文本编辑器中打开project.pbxproj
(它的文本,而不是二进制文件),并查看构建配置信息。
标有/* Begin XCBuildConfiguration section */
的部分(使用编辑器的搜索功能可以找到)。它是一个条目列表,每个条目代表给定构建配置中给定配置文件的代码签名配置。
以下是我用于签署二进制文件以进行开发的配置文件的信息:
1D6058940D05DD3E006BFB54 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Daniel Tan (XXXXXXXXXX)";
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = Breeze_Prefix.pch;
GCC_VERSION = com.apple.compilers.llvmgcc42;
INFOPLIST_FILE = "Breeze-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 4.0;
PRODUCT_NAME = "Breeze";
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "36F99F3E-805F-47A7-95D4-FF8324711CBE";
SDKROOT = iphoneos;
};
name = Debug;
};
值得注意的是这一行:
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "36F99F3E-805F-47A7-95D4-FF8324711CBE";
这是构建错误报告的GUID;我过期的配置文件的标识符。
我所要做的就是用新配置文件的GUID替换它:
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "E6E6369E-FD58-4886-9C3A-72C9DAE36501";
我再次在Xcode中打开我的项目,现在我的应用程序使用新的配置文件成功构建并安装在我的设备上。
答案 1 :(得分:15)
以下是我在Xcode 4中的表现:
答案 2 :(得分:8)
我能够通过在代码签名标识中将其更改为“不代码签名”来修复此错误。构建,您会收到错误“产品类型需要代码签名......等等......”。然后返回并选择正确的配置文件。建立和所有好。这发生在我身上,因为我的证书已经过期而且我续签了。除了上述内容之外,我还必须从我的钥匙串和组织者中删除旧证书。
答案 3 :(得分:1)
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "E8DEEBA3-FE0A-419F-9F7E-258572D55807";
答案 4 :(得分:1)
要添加到solution above,您可以使用可爱的xcodeproj gem来帮助完成这样的事情。请注意,它确实将您的OpenStep key = value;
样式plist转换为XML。注意:如果您稍后在Xcode中更改项目文件,我发现Xcode会将其更改回来。无论是在Xcode还是从命令行构建文件样式都可以。有关如何使用它的示例
project = Xcodeproj::Project.new('Foo.xcodeproj')
csi_key = 'CODE_SIGNING_IDEDNTITY'
project.targets.each do |target|
target.build_configurations.each do |conf|
conf.build_settings[csi_key] = 'iPhone Developer: Cool Dood (XYZ123)' unless conf.build_settings[csi_key] == nil
end
end
以下是我如何使用它的要点:https://gist.github.com/82times/5594887
答案 5 :(得分:1)
我对这个问题的解决方案是:
/Users/<your.username>/Library/MobileDevice/Provisioning Profiles
答案 6 :(得分:0)
就我而言,使用XCode 5,当我的开发人员证书过期时,我遇到了这个问题。我手动下载了新证书和新配置文件。我将证书添加到钥匙串,并将配置文件添加到组织者中的设备。
然而,XCode一直在抱怨我无法签署应用程序。我认为在XCode 5首选项中,它仍然显示旧的配置文件,尽管我在那里做了很多重新加载,但它没有刷新到新的配置文件。
最后,我使用iPhone配置实用程序删除旧的配置文件并添加新下载的配置文件。代码签名按预期工作。
答案 7 :(得分:0)
我认为双击下载的配置文件会将其放入xCode Organizer Archive,但这对我不起作用。以下步骤最终对我有用。
答案 8 :(得分:0)
大多数答案对我不起作用,因为它们似乎适用于旧版本。
对于Xcode 8.3.2:
执行此操作后,我可以通过单击Targets-&gt; General-&gt; Signing并确认'Created'日期下的“Xcode Managed Profile”旁边的“i”信息图标来告诉Xcode使用最新的个人资料反映了新的一个。