macdmgパッケージの署名と公証

背景

  • macOS 10.15バージョン以降、App Storeの外部から配布されるすべてのアプリは、Appleによる署名と公証が必要です。そうしないと、ダウンロードしてインストールした後、「開くことができません」と「ゴミ箱に移動」というプロンプトが表示されます。
  • 会社独自のクロスプラットフォームmacソフトウェアがダウンロードして使用するために会社のサーバーに配置されました。この問題はmacOS10.15以降に発生しました。以下に記録されているように、何度もひねりを加えた後、署名は正常に公証されます。
  • ソフトウェアはプラットフォーム間で構築されているため、スクリプトはワンクリックで構築およびパッケージ化されます。ソリューションの検索は、主にコマンドライン処理に重点を置いています。
  • ソフトウェアの名前はDog、dmg packageで、説明情報の一部がxxxxに置き換えられています。

2番目の署名証明書

3つの署名

  • 公式ウェブサイトを参照してくださいMacApp Store(macOS)の外部に配布する

  • Dog.app署名

    • コマンド
      // 字符串为证书名称,在 钥匙串访问 中可查看安装的证书
      codesign -f -o runtime -s "Developer ID Application: xxxx Ltd. (6LRF78xxxx)" -v Dog.app --deep
      
    • 備考
      • 上記に-oランタイムパラメータがない場合、公証中に次のエラーが発生します

        「実行可能ファイルで強化されたランタイムが有効になっていません」

      • データを検索する1つの方法は、XCodeプロジェクトの設定で[強化されたランタイムを有効にする]項目を処理することですが、使用されるサードパーティライブラリにも同じエラーがあるため、問題は解決しません。後で、githubのコメントで署名に-oランタイムパラメーターを追加する方法を見つけて、それを試しました。最後のコメントを表示するには、ここをクリックしてください。
  • 署名を表示

    • コマンド

      spctl  --verbose=4 --assess --type execute Dog.app 
      
    • 出力

      //以下のように、
      現時点でインターネット上で言及されているように、Dog.appは受け入れられません:rejected
      source = Unnotarized Developer ID

  • Dog.dmg署名

    • appdmgがDog.dmgを生成した後、Dog.dmgにも署名する必要があります。
    • コマンドは同じで、Dog.appはDog.dmgに置き換えられます。

4つの公証

  • 公式ウェブサイトには、公証方法について次の説明があります。

    Xcode UIを使用してソフトウェアをアップロードする方法の詳細については、公証するmacOSアプリのアップロードを参照してください。
    macOSアプリ以外のターゲットの場合は、「公証ワークフローのカスタマイズ」の説明に従って、altoolコマンドラインユーティリティを使用して公証します。

  • つまり、アプリパッケージは公証のためにXcodeUIを使用してアップロードできます。詳細については、公証するmacOSアプリのアップロードを参照してください

  • たとえば、Dog.dmgは、公証のためにaltoolコマンドラインからアップロードできます。特定のアップロードコマンドを提供する詳細については公証ワークフローのカスタマイズを参照してください

    % xcrun altool --notarize-app
                   --primary-bundle-id "com.example.ote.zip"
                   --username "AC_USERNAME"
                   --password "@keychain:AC_PASSWORD"
                   --asc-provider <ProviderShortname>
                   --file OvernightTextEditor_11.6.8.zip
    
  • 私の使用法は次のとおりです。

    # primary-bundle-id : APP ID ,请咨询签名证书创建者
    # username : 开发者账号 ,请咨询签名证书创建者
    # password : 应用专用密码(登录 appleid.apple.com ,点击 Generate Password,创建一个应用专用密码,这样可以避免暴露真实的密码。),请咨询签名证书创建者
    # asc-provider : 证书提供者(ProviderShortname) ,请咨询签名证书创建者
    # file : 公证的软件包路径
    xcrun altool --notarize-app 
                 --primary-bundle-id "6LRF78xxxx.cn.xxxx.Xixxxx" 
                 --username "[email protected]"
                 --password "ayrs-xxxx-xxxx-tjhf" 
                 --asc-provider "6LRF78xxxx" 
                 -t osx 
                 --file "./Dog.dmg"
    
    • パラメータasc-provider

      • 情報を検索すると、コマンドxcrun altool --list-providers -u "apple id" -p "app password"で取得できると言われていますが、常にエラーを報告し、次のコマンドを実行して取得しました。証明書によって作成された
        macbook security find- identity -p codesigning
      • 結果は
        Developer ID Application: xxxxBeijing)Network Technology Co., Ltd. (6LRF78xxx) 
        // 使用的括号内的 6LRF78xxx
        
    • パラメータファイル

      • 絶対パスまたは相対パスをテストします
      • pkgやzipではなく、dmgを直接公証できます
    • 出力

      // 若出现以下信息,则重新尝试
      *** Error: An error occurred saving your changes to the Apple database.
      This problem may be a transient issue on the Apple side.  If the problem persists for
       more than an hour, please contact your iTunes representative. (1129) 
      // 若出现以下信息,则成功上传
      No errors uploading './Dog.dmg'.
      RequestUUID = cb2524dd-f691-xxxx-acc3-8807exxxx864 
      
    • アップロードにエラーがない場合、公証結果を照会するためにRequestUUIDが返されます

  • 公証結果のクエリ

    • コマンド
    xcrun altool --notarization-info cb2524dd-f691-xxxx-acc3-8807exxxx864 
                 --username "[email protected]"  // 同上
                 --password "ayrs-xxxx-xxxx-tjhf"  // 同上
    
    • 出力
    // 若还未处理完毕
    No errors getting notarization info.
    
              Date: 2020-10-26 07:56:27 +0000
              Hash: 13bf499496e371751b127190xxxx489663b890cdfd72c
       RequestUUID: cb2524dd-f691-xxxx-acc3-8807exxxx864
            Status: in progress
    
    // 若公证成功
    No errors getting notarization info.
    
              Date: 2020-10-26 07:56:55 +0000
              Hash: 13bf499496e371751b1xxxxc86fd6eddebf489663b890cdfd72c
        LogFileURL: https://osxapps-ssl.itunes.apple.com/itunes-assets/Enigma124/v4/c7/56/a0/c756a0cf-b58c-1658-1904-d75e5a7e3c0e/developer_log.json?accessKey=1603893616_8033843945181087xxxx2Cdu3YhDOrVYv4%2FEmd8QWqhlKn1s4u92SbQqAR5mPQhMX66pTtSXi9vFQPWzttmQ60aqxxxxNZVr4ZjTJeV9jie%2BVmIKl0B95SXDKHGOuaYiFteW1opHFS%2FxJCw0CvkOG2RYLagtULbzbxxxxQkUgcc%2Fc%3D
       RequestUUID: cb2524dd-f691-xxxx-acc3-8807exxxx864
            Status: success
       Status Code: 0
    Status Message: Package Approve
    
  • この時点でアプリの署名が再度確認された場合:

sudo spctl --verbose = 4 --assess --type execute Dog.appの
出力は次のとおりです
。Dog.app:accepted //公証後、承認され
ますsource = Notarized Developer ID

5つの参考文献

おすすめ

転載: blog.csdn.net/luoshabugui/article/details/109295413