如何在Xcode中跳过开发版本的代码签名?

61
每当我编译我的Xcode项目时,在编译所有代码后,"签名产品"需要非常长的时间来完成。(我相信这是因为该项目包含约200 MB需要签名的资源。)我希望在开发过程中跳过代码签名,从而使构建更快完成。我该如何做到这一点?

2
在构建设置中,选择不进行代码签名。这样做有帮助吗? - Wingzero
不知道为什么,它没有帮助。这是在我拥有有效的代码签名证书之前的一个问题。 - tbodt
这是为iOS还是Mac准备的? - Joshua Nozzi
你能检查一下这个吗?https://dev59.com/Dl8d5IYBdhLWcg3wch2i - Mihriban Minaz
@JoshuaNozzi 是 Mac,但这并不重要。 - tbodt
这很重要,因为正如其他人所指出的,代码签名是在iOS设备上运行代码所必需的。在Mac上,您可以运行未经签名的代码(事实上,我在政府雇主那里就这样做)。 - Joshua Nozzi
5个回答

111
自Xcode 10起,以下是如何关闭macOS应用的代码签名:
  1. 在项目导航器中选择您的项目。
  2. 在目标列表中选择您的应用程序。
  3. 点击“Build Settings”。
  4. 点击“All”。
  5. 点击“Levels”。
  6. 在搜索字段中输入“identity”。

first six steps

  1. 单击应用程序目标列下面的Code Signing Identity行(在我的示例中标记为“test”的列)。该表格的单元格可能为空。

where to click for step 7

  1. 在弹出菜单中选择“Other…”。

pop-up menu

  1. 在弹出文本框中删除所有文本,使文本框为空。

empty popover

  1. 按回车键以关闭弹出窗口。

这样设置后,Xcode将不会为您的应用程序目标签名。


2
这个似乎无法用于构建我的iOS应用程序,是否有任何特定于构建macOS与iOS不同的东西让它工作? - Jeremy Kelleher
4
iOS 只允许签名的应用程序运行,而 macOS 则允许运行签名和未签名的应用程序。请注意,该问题标记为 [tag:macos]。 - rob mayoff
1
按照上述说明操作后,我不得不关闭并重新打开项目,以便XCode可以成功构建。 - Tony Rietwyk
1
就像魔术一样,现在我可以构建我的应用程序而不会出现有关配置文件的错误。 - aditsud
6
我遇到了错误“在为产品类型'Application'签署二进制文件时,空身份无效”,有更新吗? - Top-Master
显示剩余7条评论

55

要关闭代码签名,请进入您的项目和目标“构建设置”,搜索“代码签名标识”,在两个中将其值更改为“不进行代码签名”。

为了使这个有效,您需要分别在项目和所有目标中更改此值。


嗯...我不确定我是否已经尝试在所有目标和项目中进行更改。 - tbodt
1
我无法针对旧版本的XCode进行讲解,但在9.2+版本中,在“构建设置”下,您必须勾选“全部”选项卡才能看到“代码签名身份”选项。 - lukecampbell
7
这个解决方案已经过时了。没有“不使用代码签名”的选项,只有一个“代码签名标识”(答案中提到了两个)。我正在使用Xcode 10。 - Jason
4
现在Xcode 10只提供“本地运行签名(Ad Hoc Code Sign)”,这使得Mac编程中最后一点乐趣(快速构建)消失了。 - Rhythmic Fistman
26
在 Xcode 10 中,您可以选择“其他...”,并将文本设置为空以禁用代码签名。请参见此答案 - rob mayoff
显示剩余3条评论

11
如果有人使用CMake(用于多平台项目)来禁用特定目标的代码签名,我使用以下方法:

    set_target_properties(MyAppTarget PROPERTIES
        XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
        OUTPUT_NAME "My nice application name"
        MACOSX_BUNDLE TRUE
        MACOSX_BUNDLE_BUNDLE_NAME "My nice application name"
        MACOSX_BUNDLE_INFO_PLIST path/to/Info.plist
        MACOSX_BUNDLE_BUNDLE_VERSION ${MY_APP_VERSION}
        MACOSX_BUNDLE_LONG_VERSION_STRING "My nice application name v${MY_APP_VERSION}"
        MACOSX_BUNDLE_SHORT_VERSION_STRING "${MY_APP_VERSION}"
        MACOSX_BUNDLE_GUI_IDENTIFIER "com.my.app"
        MACOSX_BUNDLE_COPYRIGHT "(C) 2019 My Company"
        MACOSX_RPATH TRUE
        MACOSX_FRAMEWORK_IDENTIFIER com.myapp.bundle.id
        XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@loader_path/Libraries"
        RESOURCE "${RESOURCE_FILES}"
        XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME TRUE
        XCODE_ATTRIBUTE_EXECUTABLE_NAME "exec_name"
    )

1
谢谢!据我所知,这里唯一必须要做的就是将空字符串赋值给XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY以禁用签名。 - Andrii Zymohliad
1
我仍然在CMake后构建规则中看到命令/usr/bin/codesign --force --sign - --timestamp=none <ProjectName>。有任何想法吗? - Royi
1
@Royi 还需添加 XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO" - kerrytazi
@Royi,也许你知道我是否可以通过xcodebuild命令禁用代码签名? - Zohar81

0
你可以尝试将你的资源移动到一个单独的捆绑目标中,然后将该目标的.bundle产品添加到你的应用程序的“复制捆绑资源”构建阶段中。理想情况下,应用程序构建应该能够使用捆绑的签名(仅在捆绑内容更改时需要重新生成)而不是必须逐个重新签署资源。

这是否意味着我的资源文件夹中会有一个名为.bundle的文件夹,里面包含了所有我的东西? - tbodt
仅仅创建一个带有.bundle扩展名的文件夹并不能使其被签名。您需要在应用程序目标旁边创建一个实际的bundle目标。在左侧窗格中选择您的项目,然后单击“PROJECT” / “TARGETS”列表底部的+按钮;Bundle目标类型位于结果窗口的“Framework&Library”部分。从那里,选择bundle目标的Build Phases选项卡,将所有资源添加到其Copy Bundle Resources部分,然后从应用程序目标中删除所有资源。 - Noah Witherspoon
我得试一下。 - tbodt

0

对于你在模拟器中构建的iOS版本,不需要进行代码签名。因此,无需跳过。

您只需要在物理设备上进行代码签名/配置文件。我不知道如何跳过它们。

我还没有尝试过其他答案提到的可以通过越狱来构建未经过代码签名的应用程序,但我不确定它现在是否有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接