当前位置: 首页 > 面试题库 >

“不允许用户交互”尝试使用codesign对OSX应用程序进行签名

齐文林
2023-03-14
问题内容

我们的自动化版本正在Jenkins上运行。构建本身在从属服务器上运行,并且从属服务器通过SSH执行。

我收到一个错误:

00:03:25.113 [codesign-app] build/App.app: User interaction is not allowed.

我已经尝试了到目前为止在其他帖子中看到的所有建议:

  • 签名前立即使用安全性解锁钥匙串以解锁钥匙串。
  • 将签名密钥移到其自己的钥匙串中。
  • 将签名密钥移到登录密钥链中。
  • 将签名密钥移到系统密钥链中。
  • 手动将列表钥匙串设置为仅包含钥匙的钥匙串。

在所有情况下,我都会遇到相同的错误。

为了诊断问题,我尝试在本地终端上运行“securityunlock-keychain”命令,发现该命令实际上并没有解锁钥匙链-
如果我查看“钥匙串访问”,则锁符号仍然存在。无论是在命令行上通过密码还是让我提示输入密码,都是这种情况。使用GUI解锁相同的钥匙串会提示我输入密码,然后将其解锁。另外,如果我运行“
security lock-keychain”, 在运行命令后我
立即看到密钥锁。这使我认为解锁钥匙串实际上不起作用。我在Lion(我们用于构建奴隶)和Mavericks(我正在开发)上遇到相同的行为。

接下来,我尝试将-v添加到所有安全命令中:

list-keychains "-d" "system" "-s" "/Users/tester/.secret/App.keychain"
Listing keychains to see if it was added: ((
        "/Library/Keychains/System.keychain"
))
unlock-keychain "-p" "**PASSWORD**" "/Users/tester/.secret/App.keychain"
build/App.app: User interaction is not allowed.

由此看来,列表钥匙串是行不通的。也许都不行。:/

解决方案很有趣-在launchctl中将“SessionCreate”设置为true。但是我不是在主服务器上构建的-我的构建过程是从从属构建计算机上的SSH开始的。在运行“SessionCreate”时,也许有一种命令行方式可以执行launchctl在做什么?


问题答案:

好吧,我想我今天要回答我自己的问题,因为在经过两天半的时间刺伤之后,我尝试过的其中一件事情似乎奏效了。我现在要退出它,希望它能继续工作。

从本质上讲,它似乎归结为-dsystem无法实际工作。因此,应该对此处周围其他问题的很多答案进行更新以反映这一点。

security -v list-keychains -s "$KEYCHAIN" "$HOME/Library/Keychains/login.keychain"
security list-keychains # so we can verify that it was added if it fails again
security -v unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN"
codesign --sign "$SIGNER_IDENTITY" --force --signature-size 9600 \
         --resource-rules src/AppResourceRules.plist --timestamp --verbose \
         "$APP"


 类似资料:
  • 我正在使用docker compose创建一个react应用程序。Dockerfile文件和docker文件组成。yml已创建,但生成应用程序时出错。 Dockerfile docker-compose.yml 文件夹体系结构是: docker撰写。yml docker应用程序/软件包。json应用程序/src/ 执行docker compose up-d--build命令时,会出现以下错误。 构

  • 我为我的Java应用程序构建了一个Docker映像——https://bit bucket . org/ijabz/songkongdocker/src/master/Docker file 最后一行是 songremote.sh 的(简化)内容是 而且效果很好。 然而,我有一个客户想使用-m选项和路径运行songkong 例如 > 那么,有没有办法让一个泊坞站允许运行两个不同的命令,或者我必须构

  • 问题内容: 我已经在node.js的快速框架上编写了REST API,该API可以处理来自Chrome中的js控制台的请求以及URL栏等。现在,我正尝试使其针对来自另一个应用程序的请求工作,域(CORS)。 由javascript前端自动发出的第一个请求是对/ api / search?uri =的,并且似乎在“预检” OPTIONS请求上失败。 在我的快速应用中,我使用以下命令添加了CORS标头

  • 我已经创建了一个java应用程序,并按照以下教程将其与一个jre捆绑并转换为。app包:https://www.jemchicomac.com/signing-a-sandbox-app-in-osx/http://speling.shemnon.com/blog/2014/04/10/getting-your-java-app-in-the-mac-app-store/ 我可以创建。应用程序包成

  • 我必须测试一个类中的一个方法,它接受一个使用扫描器类的输入。 我想使用JUnit测试它,但不确定如何进行。 我尝试使用下面的代码,但它不起作用。 我也想用Mockito(使用mock...when...thenReturn),但不确定如何做。

  • 在python中,VSCode调试器不会单步执行外部代码。我不知道如何在launch.json中编辑“justmycode” 我只是试图在visual studio代码中调试一些python。 另外,我真的不知道我在做什么,因为我是一个java专家,而不是一个python专家。