Skip to content

Magic-Unique/IPASigner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IPASigner

A simple, quickly code sign tool for *.ipa file.

中文

IPASigner use CommandLine to parse arguments and print help banner.

Install

  1. clone or download this repo
  2. do$ pod install
  3. open IPASigner.xcworkspace with Xcode.app
  4. Select IPASigner (Release) scheme and build.
  5. do $ ipasigner, You will get:
Usage:

    $ ipasigner <COMMAND>

    An signer tools for ipa file.

Commands:

    + sign        Sign IPA with standard mode.
    + resign      Sign IPA with custom mode.
    + provision   Lookin for local provision profiles.

Options:

    --version     Show the version of the tool
    --verbose     Show more information
    --help        Show help banner of specified command
    --silent      Show nothing
    --no-ansi     Show output without ANSI codes

It's meaning that ipasigner has be installed in /usr/local/bin.

Uninstall

$ rm /usr/local/bin/ipasigner

Usage

Sign with Any Profile

iOS will not verify the bundle id, so you can sign with any profile (contains different bundle id). And ipasigner will sign App Extension、Watch App with the same profile.

IPASigner provide resign command to resign with any profile:

$ ipasigner resign --help

You must type-in a profile argument -p <profile> with one of follow values:

  • path:Profile Path, A provision profile path.
  • name:Profile Name, it will search in installed profiles, and select newest.
  • uuid:Profile UUID, it will select one in installed profiles.
  • bundleid:Profile Bundle ID, it will search in installed profiles, and select newest.

And it also requires an input path, and an optional output path.

Such as:

$ ipasigner resign -p Wildcard ./WeChat.ipa
# Sign WeChat.ipa with a wildcard profile named `Wildcard`
# You will get WeChat.signed.ipa
$ ipasigner resign -p temp.mobileprovision ./QQ.ipa ./QQ_sign.ipa
# Sign QQ.ipa with temp.mobileprovision
# You will get QQ_sign.ipa

For more detail informations and arguments, do ipasigner resign --help.

Sign in Standard Mode

IPASigner will verify bundle id,and sign App Extensions, Watch Apps with different profile。

IPASigner provide sign command to sign in standard mode:

$ ipasigner sign development --help
$ ipasigner sign ad-hoc --help
$ ipasigner sign distribution--help
$ ipasigner sign in-house --help

You must type-in SIGN_TYPE follow sign:

  • development Development Profile
  • ad-hoc AD Hoc Profile
  • distribution Distribution Profile
  • in-house Enterprice Profile

And it also requires an input path, and an optional output path.

You can modify bundle id with argument --bundle-id. Attention:

  1. It will search profile with new bundle id
  2. It will modify App Extensions, Watch Apps bundle id in the mean time, And search profile with new bundle id.

Such as:

$ ipasigner sign ad-hoc --bundle-id com.my.bundleid ./WeChat.ipa
# Modify WeChat.ipa's bundle id as `com.my.bundleid` and sign with ad-hoc profile
# You will get WeChat.signed.ipa
$ ipasigner sign in-house ./QQ.ipa ./QQ_sign.ipa
# Use default bundle id (com.tencent.xin) and sign with in-house profile
# You will get QQ_sign.ipa

For more detail informations and arguments, do

$ ipasigner sign <development|ad-hoc|distribution|in-house> --help

Sign with custom package

Info.plist

# Bundle identifier
--bundle-id <NEW_BUNDLE_ID>

# Bundle version
--bundle-version <NEW_BUNDLE_VERSION>

# Build version
--build-version <NEW_BUILD_VERSION>

# Bundle display name
--bundle-display-name <NEW_BUNDLE_DISPLAY_NAME>

# Remove UISupportDevices flag
--support-add-devices

# Enable or disable iTunes file sharing
--file-sharing
--no-file-sharing

# Enable or disable opening documents in place
--file-place
--no-file-place

Binary

# Thin all binary to single platform
--thin arm64

# Inject dylib into main binary
--inject /path/to/dylib1 --inject /path/to/dylib2 ...

# Custom entitlements
--entitlements /path/to/.entitlements
--get-task-allow <1|0>

App Extensions

# Remove PlugIns
--rm-plugins

# Remove Watches
--rm-watched

# Remove PlugIns & Watches
--rm-ext

Main Bundle

# Fix Icon Error
--fix-icons