4

我正在尝试使用 xcode 命令行创建一个 ipa 文件,包括签名。我试着搜索它,我得到了创建 ipa 的命令,没有代码签名。

我主要需要这些命令来与 hudson CI 集成。

请建议。

-普拉哈萨

4

2 回答 2

6

这是我用来与 Hudson 和我的 iPhone 应用程序集成的脚本。

#!/bin/sh

CONFIGURATION="AdHoc" # or Release or Debug

# location of files included in dist (.mobileprovision, iTunesArtwork, README)
DISTDIR="_distfiles"

. build.config

MARKETING_VERSION=`agvtool what-marketing-version -terse1`

build_xcode ()
    {
    xcodebuild -configuration "$CONFIGURATION" -sdk $SDK
}

# CONFIGURATION for xcode build can be overridden from commandline
NEWCONFIG="$1"
if ! test "$NEWCONFIG"x = x; then
    echo "=== using configuration from command line $NEWCONFIG"
    CONFIGURATION="$NEWCONFIG"
fi

# XCODE check build available for specified configuration
CHECKCONFIGURATION=`xcodebuild -list | egrep "$CONFIGURATION($|\ )"`
if test "$CHECKCONFIGURATION"x = x; then
    echo "ERROR: xcodebuild could not find valid build configuration $CONFIGURATION"
    echo
    xcodebuild -list
    echo
    exit
fi

VERSION="$MARKETING_VERSION ($BUILD_NUMBER)"
#######
echo "=== Building distribution package for $RELEASE - $VERSION"
echo "=== setting build number to $BUILD_NUMBER"
agvtool new-version -all "${BUILD_NUMBER}"

# XCODE make sure buildpath exists for configuration, build if missing
BUILDPATH="build/$CONFIGURATION-iphoneos"
build_xcode 
if [ $? != 0 ]; then
    echo "ERROR: xcodebuild not successful"
    exit 1
fi
if test ! -d "$BUILDPATH"; then
    echo "ERROR: xcodebuild could not build configuration $CONGIRUATION ($BUILDPATH)"
exit
fi
echo "=== Successfully built configuration $CONFIGURATION ($BUILDPATH)"

# HACK : accomodate configurations with spaces, chdir to determine app name
cd "$BUILDPATH"
# derive name of .app dir (application)
APPDIR=`ls -d *.app`
cd ../..

APPPATH="$BUILDPATH/$APPDIR"
DSYMPATH="$BUILDPATH/$APPDIR.dSYM"
if test "$APPDIR"x = x; then
    APPPATH="$BUILDPATH/.app"
fi


# XCODE make sure app dir exists in buildpath, build if missing
if test ! -d "$APPPATH"; then

    echo "missing $APPPATH build in $BUILDPATH, trying to build"
    build_xcode

    # HACK : accomodate configurations with spaces, chdir to determine app name
    cd "$BUILDPATH"
    # derive name of .app dir (application)
    APPDIR=`ls -d *.app`
    cd ../..

    # check again for APPDIR/APPPATH
    APPPATH="$BUILDPATH/$APPDIR"
    if test "$APPDIR"x = x; then
        APPPATH="$BUILDPATH/.app"
    fi

    if test ! -d "$APPPATH"; then
        echo "ERROR: xcodebuild could not build $APPPATH configuration $CONGIRUATION ($BUILDPATH)"
        exit
    fi
    echo "=== Successfully built $APPDIR configuration $CONFIGURATION ($BUILDPATH)"
fi

# Create directory for release package
echo " -  Creating release dir"
RELEASEDIR="$RELEASEBASE/$RELEASE-$CONFIGURATION-$MARKETING_VERSION-$BUILD_NUMBER"
mkdir -p "$RELEASEDIR"

echo "RELEASEDIR = $RELEASEDIR"
echo "BUILDPATH = $BUILDPATH"
echo "APPPATH = $APPPATH"
echo "DSYMPATH = $APPPATH"

# Copy other files
cp $DISTDIR/* "$RELEASEDIR"

# .IPA file: iphone app archive file, installable by itunes
IPA=`echo $APPDIR | sed "s/\.app/\.ipa/"`
echo " -  Creating $IPA payload"
mkdir -p "$RELEASEDIR/Payload/"
echo " - Copying $APPPATH to $RELEASEDIR/Payload/"
# Copy built .app to payload/ itunes-specific install dir
cp -Rp "$APPPATH" "$RELEASEDIR/Payload/"

# Build .IPA file
#   this is just a zipfile with a payload/ dir with the .app, and artwork
cd "$RELEASEDIR"
# include 512x512 png of artwork, if foudn
if test -f "iTunesArtwork"; then
    zip -y -r "$IPA" iTunesArtwork Payload/
    rm -rf Payload iTunesArtwork
else 
    zip -y -r "$IPA" Payload/
    rm -rf Payload 
fi

cd ..
pwd
# Create .zip packaged Distribution
ZIPFILE="$RELEASE-$CONFIGURATION-$MARKETING_VERSION-$BUILD_NUMBER.zip"
DSYMZIPFILE="$RELEASE-$CONFIGURATION-$MARKETING_VERSION-$BUILD_NUMBER-dSYM.zip"
echo " -  zipfile is $ZIPFILE"
echo " -  Compressing release $ZIPFILE"
zip -y -r "$ZIPFILE" "$RELEASE-$CONFIGURATION-$MARKETING_VERSION-$BUILD_NUMBER"
cp -pR "../$DSYMPATH" "$RELEASE-$CONFIGURATION-$MARKETING_VERSION-$BUILD_NUMBER"
echo " - creating zip of dSYM file"
zip -y -r "$DSYMZIPFILE" "$RELEASE-$CONFIGURATION-$MARKETING_VERSION-$BUILD_NUMBER/$APPDIR.dSYM"
cd ..

echo "=== Build complete for $RELEASEBASE/$ZIPFILE"

然后,我的 hudson 配置如下所示:

./build.sh AdHoc
./build.sh Release

最后,我要归档的文件如下所示:

_release/MobilePracticePro-*-${BUILD_NUMBER}*.zip

希望这对您有帮助!使用 Hudson 真的很棒。此外,请意识到您的签名密钥需要安装在与 hudson 运行相同的盒子上并以同一用户身份运行。至少对我来说是这样。

于 2011-02-22T02:33:54.093 回答
0

我一直面临同样的问题,并通过使用 命令行中链接 Xcode“Build and Archive”的详细信息中给出的步骤解决了

于 2013-08-21T10:02:34.770 回答