一个用于多个部署的命令

时间:2016-08-15 12:07:23

标签: android ios deployment react-native command-line-interface

我想知道你们中的一些人是否在一个命令中解决了如何使用多种配置生成签名的APK和IPA(即:hockeyapp的beta版和商店的生产版)。

我正在探索那里的所有可能性,看起来有很多方法可以做到这一点。

我也希望能够传递像ENVIRONMENT这样的变量来设置Javascript常量,例如API url或打开/关闭调试。 这就是我现在想的:

使用https://www.npmjs.com/package/react-native-config解决以前的问题。

在android:

我正考虑在gradle中添加buildTypes中的类型。到目前为止,我无法让它工作,我对原生配置不是很有经验。

然后我会创建一个bash脚本来创建带有所选env(staging / dev / prod)的离线包,并使用gradle的assembleRelease / assembleBeta。你认为那可行吗?

在iOS上,它看起来有点复杂:

在构建时,看起来很难在CLI中更改项目的配置。所以我想我应该为每个环境复制项目:project-dev.xcodeproj,project-prod.xcodeproj ......你明白了。

再一次,我会创建捆绑包,然后将cp放在给定项目中。一个很好的接触是在CLI中触发xcode编译,我不知道这是否很难设置。

您如何看待这个?也许你们中的一些人已经在使用自定义脚本来做到这一点?

锦上添花就是使用HockeyApp' puck'用于上传它的cli工具,但是一旦为iOS和Android构建应用程序,这应该很容易设置。

1 个答案:

答案 0 :(得分:0)

这是我用于带参数的命令行构建的过程。我的系统构建了一个发行版.ips文件,然后使用开发配置文件复制并重新分配该文件,我可以将其放在我的开发设备上,以准确测试发送给客户或应用商店的内容。并非所有这些对您都有用,但希望有些人愿意。

首先,我有一个变量文件,用于设置我将用于构建的全局参数:

Scheme="(The scheme I am going to build inside my project)"
WindowsSavePath="(path to my source archive directory on a shared computer)"
InstallSavePath="(path to my .ipa archive directory on a shared computer"
Customer="(relative path inside archive directories)"
Fleet="(Continued relative path)"
PathToProject="(path to the folder on my Mac with the xcode project file)"
ProjectName="(project name).xcodeproj"
PlistPath="$Scheme-Info.plist"
appScheme="$Scheme"
AppName="(The name that I want to give my .ipa file)"
Version="(The version number for this build)"
AppendedFileName="-QA" //I use this for QA and Production distinction
exportPath="$InstallSavePath/$Fleet/$Customer/$Version$AppendedFileName/"
CompanyAppIdentifierPrefix="(my generic provisioning profile identifier)"
ArchiveLocation="$WindowsSavePath/$Fleet/$Customer/$Version$AppendedFileName"
SourceCodeDestination="(my compiled absolute path to the archive directories)"

这都包含在SetVariables.sh文件中。现在我们开始构建项目。在另一个.sh文件中,我首先调用SetVariables文件,然后开始编译:

 #Update the version number in the plist file for the project
/usr/libexec/PListBuddy -c "Set :CFBundleShortVersionString $Version" "$PathToProject/$PlistPath"
/usr/libexec/PListBuddy -c "Set :CFBundleVersion $BuildVersion" "$PathToProject/$PlistPath"

#Now build and archive the project, the create the .ipa file for either submittal or giving to customers
mkdir -p "$exportPath"
mkdir -p "${ArchiveLocation}/dSYM"
xcodebuild  -project "$PathToProject/$ProjectName" -scheme "$Scheme" DSTROOT="$exportPath" DEBUG_INFORMATION_FORMAT="dwarf-with-dsym" DWARF_DSYM_FOLDER_PATH="${ArchiveLocation}/dSYM" archive -archivePath "$exportPath${appScheme} $Version$AppendedFileName.xcarchive"
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${exportPath}Applications/${AppName}.app" -o "${exportPath}${appScheme} $Version$AppendedFileName.ipa"

#Now resign and create an internal dev version to test on development ipads
rm -r Payload SwiftSupport
unzip -q "${exportPath}${appScheme} $Version$AppendedFileName.ipa"

BUNDLE_ID=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "Payload/${AppName}.app/Info.plist")
. ./CreateInternalEntitlements.sh "$CompanyAppIdentifierPrefix.$BUNDLE_ID"
. ./resign.sh "${exportPath}${appScheme} $Version$AppendedFileName.ipa" "${exportPath}${appScheme} ${Version}${AppendedFileName} Internal" internalDev.mobileprovision "(My developer account tied to the internal provisioning profile" Entitlements.plist
rm -r Payload SwiftSupport

#Now delete the intermediate files from the installs directory
rm -rf "$exportPath${appScheme} $Version$AppendedFileName.xcarchive"
rm -rf "${exportPath}Applications"

我在那里遗漏了一些东西(resign.sh,createentitlements.sh),但是我在stackoverflow上发现了那些进程,所以你也不应该太难找到它。

我从来没有这样做,但我相对肯定你可以改变xcodebuild的命令行参数来构建发布或调试,就像你试图做的那样。您还可以运行xcodebuild两次,一次用于调试,一次用于发布,并将构建保存到不同的位置。

我希望这对你的目标至少有所帮助。我花了一两个星期的时间把它们放在一起,为我的需求而努力。祝你好运。