zndxall

xcodebuild 打包ipa+上传蒲公英+上传应用商店app store+打包framework sdk

2018-09-23 14:51  加个小鸡腿  阅读(1416)  评论(0编辑  收藏  举报

这篇博客包含了基本所有的ios打包方面的东西,有打包成ipa的,打包成framework的,ipa上传蒲公英的,上传应用商店和testflight的,将逐一介绍

我目前mac电脑上包含三个xcode版本,一个是xcode10,一个是xcode11,一个是xcode12,其中xcode10是用来打包framework sdk的,因为有部分用户使用的xcode版本比较低,如果打包版本高,就不能集成了,所以使用xcode10打包framework sdk,xcode12是用来打包可直接安装在iphone上的ipa包,这是根据开发的需要来的,其他打包使用xcode11,比如打包sdk对于的ipa安装测试包,系统默认的是xcode11,具体使用什么版本的xcode,根据开发人员的需要来。关于如何切换xcode的版本,可以参考的另一篇博客:https://www.cnblogs.com/zndxall/p/12909858.html

<1>xcodebuild 打包ipa+上传蒲公英+上传应用商店app store

app代码仓需要发布的ipa的打包:采用achieve的方式,比如我的app_name=HP_LB,scheme也是这个,说白了,app_name其实就是scheme

(1)前期工作

  mkdir arch

  archive_path=arch/${app_name}.xcarchive

(2)清理 (其中scheme和workspace就不细说了,如果不清楚的话,ios的开发都知道,ios_type包含Debug和Release)
  xcodebuild clean -workspace ${workspace_name}.xcworkspace -scheme ${app_name} -configuration $ios_type

(3)打包成app(其中achieve路径自己定义)
  xcodebuild archive -workspace ${workspace_name}.xcworkspace -scheme ${app_name} -archivePath $archive_path -configuration $ios_type

(4)导出ipa (其中的plist文件按照自己的路径填写)
  echo export ipa ....
    plist_file=ExportOptions.plist   #到处ipa的重点就是这个plist文件,如果你不知道这个文件在哪里,你可以先使用xcode工具achive一个ipa,然后Build文件夹中找到这个文件,然后      保存这个文件到你的本地,xcodebuild自动打包的时候会用到这个文件。

       xcodebuild -exportArchive -archivePath $archive_path -exportPath arch/target_ipa  -exportOptionsPlist $plist_file  -allowProvisioningUpdates

      #如果是给测试人员使用的测试包,plist_file=ExportOptions.plist 里面的method使用的是“ad-hoc”,如果是要上传到应用商店和testflight,这个字段的值就是"app-store",这很重要

(5)上传ipa到蒲公英

    

   akey="1212122311" # api key
    ukey="13144224451" #user key
    boot_passwd="1234" #开机登陆密码
    des_msg=`git log -1 --pretty=%B` #日志信息
    ipa_path="HP_LB.ipa"
    upload_url="http://www.pgyer.com/apiv1/app/upload"
    [ ! -f "$ipa_path" ] && echo not find $ipa_path && exit 1
    echo uploading $ipa_path to pgyer .....
    curl -F "file=@${ipa_path}" -F "uKey=${ukey}" -F "_api_key=${akey}" -F "updateDescription=${des_msg}" -F "password=${boot_passwd}" $upload_url

 

其中api key和user key可以通过登录蒲公英查看到,boot_passwd是你的mac电脑的开机登录密码,其他上面已经说的很明确了。

(6)上传ipa到应用商店app store和testflight

    testflight是用来内测使用的,内测ok就可以直接上到app store了。

    akey="abqbqbqbq"
    auser="1234-1231-123***"
    sed -i "" s/"ad-hoc"/"app-store"/g ExportOptions.plist #上面说过,如果是要上传到应用商店和testflight,这个字段的值就是"app-store",这很重要
    echo export app store ipa .... #导出ipa
    archive_path=arch/HP_LB.xcarchive
    echo xcodebuild -exportArchive -archivePath $archive_path -exportPath arch/target_ipa  -exportOptionsPlist $plist_file -allowProvisioningUpdates
    xcodebuild -exportArchive -archivePath $archive_path -exportPath arch/target_ipa  -exportOptionsPlist $plist_file  -allowProvisioningUpdates
    ipa_name="HP_LB.ipa"
    xcrun altool --validate-app -f target/$ipa_name -t ios --apiKey $akey --apiIssuer $auser  --verbose #验证app的有效性
    xcrun altool --upload-app -f target/$ipa_name -t ios --apiKey $akey --apiIssuer $auser --verbose #上传app 到应用商店和testflight
上面说过,如果是要上传到应用商店和testflight,ExportOptions.plist这个字段的值就是"app-store",这很重要
api key和user id是在app store官网上申请和设置的,具体如何操作,请自查。
xcrun altool那两条命令用来验证ipa是否有效,和上传应用商店,如果无效就没有上传的必要,无效的话,会报错。

 

2.打包framework sdk:sdk代码仓,需要打对应ipa测试,也需要给客户sdk framework集成。

(1)清理

  xcodebuild clean -project ${project_name}.xcodeproj -scheme ${app_name} -configuration Release

(2)打包成app
  xcodebuild build -project ${project_name}.xcodeproj -scheme ${app_name} -configuration Release

(3)将app放到Payload文件夹中,并压缩文件夹为zip后缀,然后修改为ipa后缀

  mv Build/ProductsRelease-iphoneos/"$app_name".app Payload/
  zip -q -r "$ios_app_name".zip Payload
  cp "$ios_app_name".zip target/"$ios_app_name".ipa

这个ipa就可以发给测试测了。

 (4)生成sdk framework

     (4.1)生成真机framework:

    ios_scheme_tmp=HP_LBFM  #sdk的scheme,根据自己实际情况定
    itype-iphoneos=Release #构建类型,Debug或者Release
    sdk_version=`xcodebuild -showsdks |grep "iphoneos" |awk -F \'-sdk \' \'{print $2}\'`   #获取真机版本
    xcodebuild  -scheme ${ios_scheme_tmp}  -configuration $itype  -sdk $sdk_version clean build  #使用系统真机sdk构建
    mv Build/Products Build/Products_re   #备份上面编译好的真机framework

    (4.2)生成模拟机framework:   

    sdk_version=`xcodebuild -showsdks |grep "iphonesimulator" |awk -F \'-sdk \' \'{print $2}\'`  #获取模拟机版本
    xcodebuild  -scheme ${ios_scheme_tmp}  -configuration $itype  -sdk $sdk_version  clean build #使用模拟机sdk构建
    mv Build/Products_re/* Build/Products/  #复制上面备份好的真机framework到模拟机路径下

     (4.3)整合真机和模拟机famework:

    cd Build/Products
    lipo -info $itype-iphoneos/"$ios_scheme_tmp".framework/$ios_scheme_tmp #显示真机信息
    lipo -info $itype-iphonesimulator/"$ios_scheme_tmp".framework/$ios_scheme_tmp #显示模拟机信息
    cp $itype-iphoneos/"$ios_scheme_tmp".framework/$ios_scheme_tmp ./
    
    #整合真机和模拟机
    lipo -create $ios_scheme_tmp $itype-iphonesimulator/"$ios_scheme_tmp".framework/$ios_scheme_tmp -output $itype-iphoneos/$ios_scheme_tmp
    [ $? -ne 0 ] && exit 1
    mv $itype-iphoneos/$ios_scheme_tmp $itype-iphoneos/"$ios_scheme_tmp".framework
    lipo -info $itype-iphoneos/"$ios_scheme_tmp".framework/$ios_scheme_tmp |tee ios_result #显示整合后得信息

(4.4)检查是否整合成功:【根据自己项目确定需要满足的类型】

    sed -i .tmp \'s/\n//g\' ios_result #删除文件中的换行
    success_flag=`cat ios_result |awk -F \': \' \'{print $3}\'`   #检查是否整合成功(支持的平台)
    if [ "$success_flag" != "armv7 i386 x86_64 arm64 " ];then #注意,结尾有空格
        echo build fail and is not armv7 i386 x86_64 arm64
    else
        echo build success and is armv7 i386 x86_64 arm64   #正常情况下,必须包含这四种类型才算整合成功【根据自己项目确定需要满足的类型】
    fi
 cd $itype-iphoneos/
 tar -cvf "$ios_scheme_tmp"_framework.tar "$ios_scheme_tmp".framework #压缩framwork  
最后把这个压缩好的tar包给用户就可以集成了。

xcodebuild 的其他简单用法:

(1)xcodebuild -list #显示scheme
(2)xcodebuild -showsdks #显示系统和模拟器得sdk版本

 

参考资料:

https://www.jianshu.com/p/36d2c6d65aa7

http://lijingcheng.github.io/blog/2016/12/05/tong-guo-xcodebuildda-bao-ipabing-shang-chuan-pu-gong-ying/

 

分类:

技术点:

相关文章:

  • 2021-04-16
  • 2021-11-05
  • 2021-11-17
  • 2021-11-02
  • 2021-10-19
  • 2021-12-25
  • 2021-11-04
  • 2021-12-25
猜你喜欢
  • 2021-12-25
  • 2021-10-21
  • 2021-08-13
  • 2021-12-24
  • 2021-11-10
  • 2021-11-09
  • 2021-11-15
相关资源
相似解决方案