Вопрос
Можно ли отменить/предоставить IPA, экспортированные для AppStore, с сертификатом разработки и профилем?
Я могу уйти в отставку, и после ручной проверки все выглядит нормально, однако любое приложение, в котором я пытаюсь это сделать, падает при запуске. Я не пытаюсь отказаться от приложения, загруженного из AppStore, это приложения, созданные на моем компьютере.
Похоже, ни один из популярных инструментов не делает этого правильно. Кто-нибудь когда-нибудь справился с этим или это невозможно по какой-то причине?
Результаты
В журнале устройства я не вижу ничего, о чем сообщает сам процесс приложения, поэтому ОС, должно быть, убила его перед запуском. Я вижу это:
securityd[101] <Notice>: cert[0]: CheckLeafMarkerOid =(leaf)[]> 0
securityd[101] <Notice>: cert[0]: SubjectCommonName =(leaf)[]> 0
securityd[101] <Notice>: cert[0]: IssuerCommonName =(path)[]> 0
amfid(Security)[196] <Notice>: [leaf CheckLeafMarkerOid IssuerCommonName SubjectCommonName]
amfid(libmis.dylib)[196] <Info>: Blacklist does not exist.
amfid(libmis.dylib)[196] <Info>: Using empty blacklist.
amfid(libmis.dylib)[196] <Info>: CreateMISAuthListWithStream: open stream failed (may be non-existing)
amfid(libmis.dylib)[196] <Info>: CreateMISAuthListWithStream: creating empty auth list
assertiond[66] <Notice>: Unable to obtain a task name port right for pid 1683: (os/kern) failure (5)
SpringBoard(FrontBoard)[57] <Error>: Unable to register for exec notifications: No such process
SpringBoard(BaseBoard)[57] <Error>: Unable to get short BSD proc info for 1683: No such process
SpringBoard(BaseBoard)[57] <Error>: Unable to get proc info for 1683: No such process
SpringBoard(BaseBoard)[57] <Error>: Unable to obtain a task name port right for pid 1683: (os/kern) failure (0x5)
SpringBoard(BaseBoard)[57] <Error>: Unable to get short BSD proc info for 1683: No such process
SpringBoard(FrontBoard)[57] <Error>: Unable to obtain a process handle for <FBApplicationProcess: 0x10bc26cd0; com.company.product.name; pid: 1683>
Похоже, это указывает на проблему с правами. Однако, когда я вручную распечатываю их (/usr/libexec/PlistBuddy -x -c "print :Entitlements " /dev/stdin <<< $(security cms -D -i "$1"/embedded.mobileprovision) > entitlements.plist
) из установленного IPA, у меня есть:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>TEAMID.*</string>
<key>com.apple.developer.default-data-protection</key>
<string>NSFileProtectionComplete</string>
<key>com.apple.developer.team-identifier</key>
<string>TEAMID</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>TEAMID.*</string>
</array>
</dict>
</plist>
Это ясно показывает, что право get-task-allow
является истинным.
Инструменты
Какой бы инструмент я ни пробовал, я получаю тот же результат, например
- https://dantheman827.github.io/ios-app-signer/
- https://github.com/nowsecure/node-applesign
- https://github.com/fastlane/fastlane/blob/master/sigh/lib/assets/resign.sh
Похожие вопросы
- можем ли мы отказаться от сборки магазина приложений с нашими сертификатами разработки? Простой ответ нет кажется неверным, поскольку я могу выполнить фактическую операцию отказа без предупреждений или ошибок.
- Переназначить приложение iOS из удостоверения дистрибутива разработчику идентификационные данные Покажите, как проверить и/или адаптировать окончательные права в аннулированном IPA.
- iOS отказывается от IPA из магазина приложений с профилем разработчика Вопрос немного старше, но один из комментаторов в конечном итоге сообщает о том же наблюдаемом поведении: «но он не может нормально работать, это воспоминание. до сих пор я понятия не имею об этом».
Обновление 1
(реакция на @Yoshkebab)
Вывод otool предполагает, что двоичный файл не зашифрован: otool -l App/Payload/App.app/App | grep -A 4 -i encrypt
:
cmd LC_ENCRYPTION_INFO
cmdsize 20
cryptoff 0
cryptsize 0
cryptid 0
--
cmd LC_ENCRYPTION_INFO_64
cmdsize 24
cryptoff 0
cryptsize 0
cryptid 0
Однако, например. Хоппер не может его разобрать... Есть ли упоминания о том, что Apple применяет шифрование в Xcode? Это указывало бы на то, что у них есть этот ключ в системах пользователя? Также я не вижу шагов сборки, которые указывали бы на это (дизайн кода просто добавляет подпись, не так ли?)
Clutch не видит мое приложение, а библиотека dumpdecrypted Стефана Эссера не работает, потому что я подозреваю, что приложение сразу же дает сбой (моя настройка в порядке, потому что она работает для других приложений).
codesign -d --entitlements - [path to app binary]
- person Tristan Burnside   schedule 01.08.2017