- 找到altool工具的位置
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool
- 在命令行里面添加别名(alias),不然输入太痛苦,在
.zshrc
文件里面添加下面的代码,然后运行source ~/.zshrc
alias altool="/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
- 做完上面两步就可以在命令行里面敲
altool -h
了。 - 验证ipa包
//可以在命令最后加上--output-format xml,可以获得Plist形式的输出。
altool -v -f /Users/xxx/test.ipa -u example@test.com -p YourPassword(app-specific) -t ios
a.如果上面输入的是开发者账户的密码,会出现如下错误:
2019-11-12 18:01:29.484 altool[2364:46868] *** Error: Unable to validate your application.
Sign in with the app-specific password you generated.
If you forgot the app-specific password or need to create a new one, go to appleid.apple.com
注意:这里跟登录Application Loader一样,要使用在appleid.apple.com里面创建的专用密码(app-specific)。
b.更换密码之后,验证报错
2019-11-12 18:08:20.466 altool[2413:49401] *** Error: Unable to validate archive '/Users/edz/Desktop/altoolsipa/altools.ipa': (
"Error Domain=ITunesConnectionOperationErrorDomain Code=1190 \"No suitable application records were found. Verify your bundle identifier 'com.xwmios.altoolstest' is correct.\" UserInfo={NSLocalizedRecoverySuggestion=No suitable application records were found. Verify your bundle identifier 'com.xwmios.altoolstest' is correct., NSLocalizedDescription=No suitable application records were found. Verify your bundle identifier 'com.xwmios.altoolstest' is correct., NSLocalizedFailureReason=App Store operation failed.}"
)
发现是bundle ID跟App Store Connect里面的对应不上。
c.成功
2019-11-12 18:14:35.264 altool[2527:51127] No errors validating archive at /Users/edz/Desktop/altoolsipa/altools.ipa
- 上传ipa包
altool --upload-app -f /Users/xxx/test.ipa -t ios -u example@test.com -p YourPassword(app-specific)
上传成功
2019-11-12 18:24:09.007 altool[2676:52276] No errors uploading '/Users/edz/Desktop/altoolsipa/altools.ipa'
application loader里面的altool版本信息
Copyright (c) 2009-2018, Apple Inc. Version 1.1.1138
Usage: altool --validate-app -f <file> -t <platform> -u <username> [-p <password>]
altool --upload-app -f <file> -t <platform> -u <username> [-p <password>]
altool --notarize-app -f <file> --primary-bundle-id <bundle_id> -u <username> [-p <password>] [--asc-provider <provider_shortname>]
altool --notarization-info <uuid> -u <username> [-p <password>]
altool --notarization-history <page> -u <username> [-p <password>] [--asc-provider <provider_shortname>]
-f, --file <file> <file> specifies the path to the file to process.
-t, --type {osx | ios | appletvos} Specify the platform of the file.
-u, --username <username> Username. Required to connect for validation, upload, and notarization.
-p, --password <password> Password. Required if username specified.
If this argument is not supplied on the command line, it will be read from stdin.
Alternatively to entering <password> in plaintext, it may also be specified using a '@keychain:'
or '@env:' prefix followed by a keychain password item name or environment variable name.
Example: '-p @keychain:<name>' uses the password stored in the keychain password item named <name>
and whose Account value matches the user name specified
Example: '-p @env:<variable>' uses the value in the environment variable named <variable>
--primary-bundle-id <bundle_id> Used with --notarize-app to uniquely identify a package.
--asc-provider <provider_shortname> Required with --notarize-app and --notarization-history when a user account is associated with multiple
providers.
-v, --validate-app Validates an app archive for the App Store. The username, password, and file path to the app archive are required.
--upload-app Uploads the given app archive to the App Store. The username, password, and file path to the app archive are required.
--notarize-app Uploads the given app package, dmg or zip file for notarization. The file path to the package, user name,
password, and --primary-bundle-id are required. --asc-provider is required for an account associated with multiple providers.
If successful, the UUID associated with the upload is returned.
--notarization-info <uuid> Returns the status and log file URL of a package previously uploaded for notarization with the specified uuid.
The user name and password are required. The log file can be retrieved with 'curl <log_file_url>'.
--notarization-history <page> Returns a list of all uploads submitted for notarization. <page> specifies a range of entries where 0
returns the most recent number of entries. A new page value will be returned which can be used as the
<page> value to the next use of --notarization-history and so forth until no more items are returned. The user name
and password are required. --asc-provider is required for an account associated with multiple providers.
--output-format {xml | normal} Specifies how the output is formatted. 'xml' displays the output in a structured format; 'normal' displays in
an unstructured format (default).
-h, --help Display this output.
新版本Xcode11里面去掉Application Loader后,xcrun altool
信息:
Copyright (c) 2009-2019, Apple Inc. Version 4.00.1181
Usage: altool --validate-app -f <file> -t <platform> -u <username> {[-p <password>] | --apiKey <api_key> --apiIssuer <issuer_id>}
altool --upload-app -f <file> -t <platform> -u <username> {[-p <password>] | --apiKey <api_key> --apiIssuer <issuer_id>}
altool --notarize-app -f <file> --primary-bundle-id <bundle_id> -u <username> {[-p <password>] | --apiKey <api_key> --apiIssuer <issuer_id>} [--asc-provider <provider_shortname>]
altool --notarization-info <uuid> -u <username> {[-p <password>] | --apiKey <api_key> --apiIssuer <issuer_id>}
altool --notarization-history <page> -u <username> {[-p <password>] | --apiKey <api_key> --apiIssuer <issuer_id>} [--asc-provider <provider_shortname>]
altool --list-apps -u <username> {[-p <password>] | --apiKey <api_key> --apiIssuer <issuer_id>}
altool --store-password-in-keychain-item <name_for_keychain_item> -u <username> -p <password>
Authentication: Most commands require authorization.
There are two methods available: user name with password, and apiKey with apiIssuer.
-u, --username <username> Username. Required to connect for validation, upload, and notarization.
-p, --password <password> Password. Required if username specified and apiKey/apiIssuer are not.
If this argument is not supplied on the command line, it will be read from stdin.
Alternatively to entering <password> in plaintext, it may also be specified using a '@keychain:'
or '@env:' prefix followed by a keychain password item name or environment variable name.
Example: '-p @keychain:<name>' uses the password stored in the keychain password item named <name>.
You can create and update keychain items with the
--store-password-in-keychain-item command.
Example: '-p @env:<variable>' uses the value in the environment variable named <variable>
--apiKey <api_key> apiKey. Required for JWT authentication while using validation, upload, and notarization.
This option will search the following directories in sequence for a private key file
with the name of 'AuthKey_<api_key>.p8': './private_keys', '~/private_keys', '~/.private_keys',
and '~/.appstoreconnect/private_keys'.
--apiIssuer <issuer_id> Issuer ID. Required if --apiKey is specified.
-f, --file <file> <file> specifies the path to the file to process.
-t, --type {osx | ios | appletvos} Specify the platform of the file.
--primary-bundle-id <bundle_id> Used with --notarize-app to uniquely identify a package.
--asc-provider <provider_shortname> Required with --notarize-app and --notarization-history when a user account is associated with multiple
providers.
-v, --validate-app Validates an app archive for the App Store. Authentication and -f are required.
--upload-app Uploads the given app archive to the App Store. Authentication and -f are required.
--list-apps Display all apps associated with your account(s).
--notarize-app Uploads the given app package, dmg or zip file for notarization. Authentication, -f,
and --primary-bundle-id are required. --asc-provider is required for an account associated with multiple providers.
If successful, the UUID associated with the upload is returned.
--notarization-info <uuid> Returns the status and log file URL of a package previously uploaded for notarization with the specified <uuid>.
Authentication is required. The log file can be retrieved with 'curl <log_file_url>'.
--notarization-history <page> Returns a list of all uploads submitted for notarization. <page> specifies a range of entries where 0
returns the most recent number of entries. A new page value will be returned which can be used as the
<page> value to the next use of --notarization-history and so forth until no more items are returned.
Authentication is required. --asc-provider is required for an account associated with multiple providers.
--store-password-in-keychain-item <name_for_keychain_item> -u <username> -p <password>
Stores the password <password> in the keychain item named <name_for_keychain_item> associated with the account <username>.
If an item with that name and account already exists in the keychain, its password will be updated. Otherwise a new item
is created with that name. You can use this keychain item with the -p option to mask your password with other commands.
Example: altool --store-password-in-keychain-item MY_SECRET -u jappleseed@apple.com -p "MyP@ssw0rd!@78"
altool --notarize-app -u jappleseed@apple.com -p @keychain:MY_SECRET [...]
--output-format {xml | normal} Specifies how the output is formatted. 'xml' displays the output in a structured format; 'normal' displays in
an unstructured format (default).
--verbose Enable logging output.
-h, --help Display this output.
网友评论