Ручное управление репозиторием соответствия fastlane

#ios #swift #xcode #code-signing #fastlane

#iOS #swift #xcode #подписание кода #fastlane

Вопрос:

Я должен настроить соответствие fastlane без отзыва существующих профилей и сертификатов. Итак, я провел свое исследование и нашел этот отличный учебник здесь: Medium и официальный документ от fastlane (нажмите на инструкции внизу страницы).

Через некоторое время мне удалось создать свой репозиторий, расшифровать его, добавить свои сертификаты и профили, зашифровать их и отправить обратно в репозиторий. Пока все хорошо!

При запуске fastlane match --readonly --verbose (только для чтения, потому что, опять же, я не хочу заменять существующие сертификаты) Я получаю этот результат:

 [!] Error packaging up the application
*******-MacBook-Pro:*******-3 *******$ fastlane match --readonly --verbose
[✔] 🚀 
[12:53:34]: Get started using a Gemfile for fastlane https://docs.fastlane.tools/getting-started/ios/setup/#use-a-gemfile
WARNING: You are running Ruby 2.3.7, which is nearing end-of-life.
The Google Cloud API clients work best on supported versions of Ruby. Consider upgrading to Ruby 2.4 or later.
See https://www.ruby-lang.org/en/downloads/branches/ for more info on the Ruby maintenance schedule.
To suppress this message, set the GOOGLE_CLOUD_SUPPRESS_RUBY_WARNINGS environment variable.
INFO [2019-03-12 12:53:35.72]: Successfully loaded '/Users/*******/Documents/work/*******/fastlane/Matchfile' 📄

 ---------------- -------------------------------------------------------------- 
|                  Detected Values from './fastlane/Matchfile'                  |
 ---------------- -------------------------------------------------------------- 
| git_url        | git@bitbucket.org:******.git |
| storage_mode   | git                                                          |
| type           | development                                                  |
| app_identifier | com.********                                  |
| username       | *******                                            |
| git_branch     | *******                                               |
 ---------------- -------------------------------------------------------------- 


 ----------------------- -------------------------------------------------------------- 
|                              Summary for match 2.117.1                               |
 ----------------------- -------------------------------------------------------------- 
| verbose               | true                                                         |
| readonly              | true                                                         |
| type                  | development                                                  |
| app_identifier        | ["*******"]                              |
| username              | *******                                            |
| storage_mode          | git                                                          |
| git_url               | git@bitbucket.org:******* |
| git_branch            | *******                                              |
| shallow_clone         | false                                                        |
| clone_branch_directly | false                                                        |
| keychain_name         | login.keychain                                               |
| force                 | false                                                        |
| force_for_new_devices | false                                                        |
| skip_confirmation     | false                                                        |
| skip_docs             | false                                                        |
| platform              | ios                                                          |
 ----------------------- -------------------------------------------------------------- 

INFO [2019-03-12 12:53:35.74]: Cloning remote git repo...
INFO [2019-03-12 12:53:35.74]: If cloning the repo takes too long, you can use the `clone_branch_directly` option in match.
INFO [2019-03-12 12:53:35.74]: $ git clone git@bitbucket.org:******* /var/folders/qf/2fgm_41x0pj6mytxdd8ksgnh0000gn/T/d20190312-39387-3rq3n2
INFO [2019-03-12 12:53:35.77]: ▸ Cloning into '/var/folders/qf/2fgm_41x0pj6mytxdd8ksgnh0000gn/T/d20190312-39387-3rq3n2'...
INFO [2019-03-12 12:53:38.15]: ▸ remote: Counting objects: 42, done.
INFO [2019-03-12 12:53:38.47]: ▸ remote: Compressing objects: 100% (37/37), done.
INFO [2019-03-12 12:53:38.87]: ▸ remote: Total 42 (delta 1), reused 0 (delta 0)
INFO [2019-03-12 12:53:38.87]: ▸ Receiving objects: 100% (42/42), 221.58 KiB | 575.00 KiB/s, done.
INFO [2019-03-12 12:53:38.87]: ▸ Resolving deltas: 100% (1/1), done.
INFO [2019-03-12 12:53:38.89]: $ git --no-pager branch --list origin/******* --no-color -r
INFO [2019-03-12 12:53:38.90]: ▸ origin/*******
INFO [2019-03-12 12:53:38.90]: Checking out branch *******...
INFO [2019-03-12 12:53:38.90]: $ git checkout *******
INFO [2019-03-12 12:53:38.92]: ▸ Branch '*******' set up to track remote branch '*******' from 'origin'.
INFO [2019-03-12 12:53:38.92]: ▸ Switched to a new branch '*******'
INFO [2019-03-12 12:53:38.97]: 🔓  Decrypted '5DDF2PK5F3.cer'
INFO [2019-03-12 12:53:39.01]: 🔓  Decrypted '5DDF2PK5F3.cer'
INFO [2019-03-12 12:53:39.05]: 🔓  Decrypted '5DDF2PK5F3.cer'
INFO [2019-03-12 12:53:39.09]: 🔓  Decrypted '5DDF2PK5F3.p12'
INFO [2019-03-12 12:53:39.13]: 🔓  Decrypted '5DDF2PK5F3.p12'
INFO [2019-03-12 12:53:39.17]: 🔓  Decrypted '5DDF2PK5F3.p12'
INFO [2019-03-12 12:53:39.21]: 🔓  Decrypted '*******_Appstore.mobileprovision'
INFO [2019-03-12 12:53:39.25]: 🔓  Decrypted '*******_Development.mobileprovision'
INFO [2019-03-12 12:53:39.29]: 🔓  Decrypted '*******_APP_Development.mobileprovision'
INFO [2019-03-12 12:53:39.33]: 🔓  Decrypted '*******_APP_Adhoc.mobileprovision'
INFO [2019-03-12 12:53:39.37]: 🔓  Decrypted '*******_DEV_Adhoc.mobileprovision'
INFO [2019-03-12 12:53:39.37]: 🔓  Successfully decrypted certificates repo
DEBUG [2019-03-12 12:53:39.37]: Your certificate '5DDF2PK5F3.cer' is valid
INFO [2019-03-12 12:53:39.37]: Installing certificate...
INFO [2019-03-12 12:53:39.37]: $ security list-keychains -d user
INFO [2019-03-12 12:53:39.39]: ▸     "/Users/*******/Library/Keychains/login.keychain-db"
INFO [2019-03-12 12:53:39.39]: $ security find-certificate -c 'Apple Worldwide Developer Relations Certification Authority' /Users/*******/Library/Keychains/login.keychain-db
INFO [2019-03-12 12:53:39.42]: ▸ keychain: "/Users/*******/Library/Keychains/login.keychain-db"
INFO [2019-03-12 12:53:39.42]: ▸ version: 512
INFO [2019-03-12 12:53:39.42]: ▸ class: 0x80001000 
INFO [2019-03-12 12:53:39.42]: ▸ attributes:
INFO [2019-03-12 12:53:39.42]: ▸     "alis"<blob>="Apple Worldwide Developer Relations Certification Authority"
INFO [2019-03-12 12:53:39.42]: ▸     "cenc"<uint32>=0x00000003 
INFO [2019-03-12 12:53:39.42]: ▸     "ctyp"<uint32>=0x00000001 
INFO [2019-03-12 12:53:39.42]: ▸     "hpky"<blob>=0x88271709A9B618608BECEBBAF64759C55254A3B7  "210'271125126630`213354353272366GY305RT243267"
INFO [2019-03-12 12:53:39.42]: ▸     "issu"<blob>=0x3062310B300906035504061302555331133011060355040A130A4150504C4520494E432E31263024060355040B131D4150504C452043455254494649434154494F4E20415554484F52495459311630140603550403130D4150504C4520524F4F54204341  "0b1130110603U04062302US1230210603U04122312APPLE INC.1amp;0$0603U04132335APPLE CERTIFICATION AUTHORITY1260240603U04032315APPLE ROOT CA"
INFO [2019-03-12 12:53:39.42]: ▸     "labl"<blob>="Apple Worldwide Developer Relations Certification Authority"
INFO [2019-03-12 12:53:39.42]: ▸     "skid"<blob>=0x88271709A9B618608BECEBBAF64759C55254A3B7  "210'271125126630`213354353272366GY305RT243267"
INFO [2019-03-12 12:53:39.42]: ▸     "snbr"<blob>=0x01DEBCC4396DA010  "013362743049m24020"
INFO [2019-03-12 12:53:39.42]: ▸     "subj"<blob>=0x308196310B300906035504061302555331133011060355040A0C0A4170706C6520496E632E312C302A060355040B0C234170706C6520576F726C647769646520446576656C6F7065722052656C6174696F6E733144304206035504030C3B4170706C6520576F726C647769646520446576656C6F7065722052656C6174696F6E732043657274696669636174696F6E20417574686F72697479  "02012261130110603U04062302US1230210603U04121412Apple Inc.1,0*0603U041314#Apple Worldwide Developer Relations1D0B0603U040314;Apple Worldwide Developer Relations Certification Authority"
DEBUG [2019-03-12 12:53:40.96]: Certificate '5DDF2PK5F3.cer' is already installed on this machine
INFO [2019-03-12 12:53:40.96]: $ security import /var/folders/qf/2fgm_41x0pj6mytxdd8ksgnh0000gn/T/d20190312-39387-3rq3n2/certs/development/5DDF2PK5F3.p12 -k '/Users/*******/Library/Keychains/login.keychain-db' -P '' -T /usr/bin/codesign -T /usr/bin/security
INFO [2019-03-12 12:53:41.05]: ▸ 1 identity imported.
[⠋] Setting key partition list... (this can take a minute if there are a lot of keys installed) INFO [2019-03-12 12:53:41.06]: $ security set-key-partition-list -S apple-tool:,apple: -k '' /Users/*******/Library/Keychains/login.keychain-db 1> /dev/null
WARN [2019-03-12 12:53:41.10]: 
WARN [2019-03-12 12:53:41.10]: Could not configure imported keychain item (certificate) to prevent UI permission popup when code signing
Check if you supplied the correct `keychain_password` for keychain: `/Users/*******/Library/Keychains/login.keychain-db`
security: SecKeychainItemSetAccessWithPassword: The user name or passphrase you entered is not correct.
WARN [2019-03-12 12:53:41.10]: 
WARN [2019-03-12 12:53:41.10]: Please look at the following docs to see how to set a keychain password:
WARN [2019-03-12 12:53:41.10]:  - https://docs.fastlane.tools/actions/sync_code_signing
WARN [2019-03-12 12:53:41.10]:  - https://docs.fastlane.tools/actions/get_certificates
[✔] Setting key partition list... (this can take a minute if there are a lot of keys installed) 

 ------------------- -------------------------------------------- 
|                     Installed Certificate                      |
 ------------------- -------------------------------------------- 
| User ID           | 959S873XG9                                 |
| Common Name       | iPhone Developer: ******* (*******) |
| Organisation Unit | *******                                 |
| Organisation      | *******                         |
| Country           | DE                                         |
| Start Datetime    | 2019-01-15 13:57:48 UTC                    |
| End Datetime      | 2020-01-15 13:57:48 UTC                    |
 ------------------- -------------------------------------------- 

ERROR [2019-03-12 12:53:41.11]: No matching provisioning profiles found for 'Development_com.*******'
ERROR [2019-03-12 12:53:41.11]: A new one cannot be created because you enabled `readonly`
ERROR [2019-03-12 12:53:41.11]: Provisioning profiles in your repo for type `development`:
ERROR [2019-03-12 12:53:41.11]: - '*******_DEV_Development.mobileprovision'
ERROR [2019-03-12 12:53:41.11]: - '*******_APP_Development.mobileprovision'
ERROR [2019-03-12 12:53:41.11]: If you are certain that a profile should exist, double-check the recent changes to your match repository
/Library/Ruby/Gems/2.3.0/gems/fastlane-2.117.1/fastlane_core/lib/fastlane_core/ui/interface.rb:141:in `user_error!': [!] No matching provisioning profiles found and can not create a new one because you enabled `readonly`. Check the output above for more information. (FastlaneCore::Interface::FastlaneError)
	from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.117.1/fastlane_core/lib/fastlane_core/ui/ui.rb:17:in `method_missing'
	from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.117.1/match/lib/match/runner.rb:254:in `fetch_provisioning_profile'
	from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.117.1/match/lib/match/runner.rb:98:in `block (2 levels) in run'
	from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.117.1/match/lib/match/runner.rb:97:in `loop'
	from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.117.1/match/lib/match/runner.rb:97:in `block in run'
	from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.117.1/match/lib/match/runner.rb:96:in `each'
	from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.117.1/match/lib/match/runner.rb:96:in `run'
	from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.117.1/match/lib/match/commands_generator.rb:51:in `block (2 levels) in run'
	from /Library/Ruby/Gems/2.3.0/gems/commander-fastlane-4.4.6/lib/commander/command.rb:178:in `call'
	from /Library/Ruby/Gems/2.3.0/gems/commander-fastlane-4.4.6/lib/commander/command.rb:153:in `run'
	from /Library/Ruby/Gems/2.3.0/gems/commander-fastlane-4.4.6/lib/commander/runner.rb:476:in `run_active_command'
	from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.117.1/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:76:in `run!'
	from /Library/Ruby/Gems/2.3.0/gems/commander-fastlane-4.4.6/lib/commander/delegates.rb:15:in `run!'
	from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.117.1/match/lib/match/commands_generator.rb:172:in `run'
	from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.117.1/match/lib/match/commands_generator.rb:24:in `start'
	from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.117.1/fastlane/lib/fastlane/cli_tools_distributor.rb:111:in `take_off'
	from /Library/Ruby/Gems/2.3.0/gems/fastlane-2.117.1/bin/fastlane:23:in `<top (required)>'
	from /usr/local/bin/fastlane:22:in `load'
	from /usr/local/bin/fastlane:22:in `<main>'  

Итак, мои вопросы:

  • Есть ли общая известная проблема, которую вы видите из-за подробного журнала?

  • Возможно ли вообще использовать этот метод, используя автоматически сгенерированные Xcode сертификаты (автоматическая подпись)?

  • Если нет, есть ли у вас какие-либо другие идеи, как использовать match, не вмешиваясь в существующие сертификаты?

Ответ №1:

Похоже, что ваши .mobileprovision файлы названы неправильно. Правильный формат

 CertType_bundleid.mobileprovision
  

Например

 Development_com.apple.podcasts.mobileprovision
  

Этот файл должен находиться в /profiles/development каталоге репозитория соответствия.

Не связано и не уверен, но, похоже, у вас также может возникнуть проблема с использованием цепочки для ключей, вы можете захотеть взглянуть на unlock_keychain действие, если это окажется так.

Комментарии:

1. Существуют ли документы о правильном именовании и структуре папок?

2. Насколько я знаю, нет, но это был бы желанный запрос на извлечение в репозиторий docs :). В противном случае вам придется взглянуть на исходный код и тесты.