経験は、iOSのフラッタービルドがipaパッケージが大きすぎるヒットすることを証明し、通常のパックにxcodebuildを使用し、難読化コードを設定サポートしています。 iOSは、署名の理由のパッケージが失敗した場合は、まずXcodeを使用して、それに一度ノーマルをヒットします。
台本通り:
##
SECONDS=0
# パッケージングタイプ1:android 2:ios any:他のすべて
platform=0
## タンポポAPIKey https://..//pi
pgyer_api_key=""
## タンポポの接尾辞
pgyer_subfix_url=""
## タンポポのインストールパスワード
pgyer_pwd=""
# コード難読化を使用しない
#obfuscate=""
# コードの難読化を有効にする
obfuscate="--obfuscate --split-debug-info=app"
# パッケージの種類を選択する
read -n1 -p "パッケージタイプ1を設定する:android 2:ios any:他のすべて[1/2/any]? " -t 5 answer
platform=${answer}
echo "クリーンアップビルド"
find . -d -name "build" | xargs rm -rf
flutter clean
echo "パッケージプラグインリソースを取得するために開始する"
flutter packages get
# iOS
build_ios() {
cd ios
project=`find . -name *.xcodeproj | awk -F "[/.]" '{print $(NF-1)}'`
## true or false デフォルトtrue
workspace_flag="true"
## Release or Debug デフォルトリリース
configuration="Release"
## Bitcodeオンデフォルトを切り替える
compileBitcode=true
## 署名モードデフォルトの自動署名は、パッケージが失敗した場合、最初にXcodeを使用して、通常の上に一度だけ再生する
signingStyle="automatic"
## 署名
### development
### ad-hoc
### app-store
### enterprise
methodStyle="ad-hoc"
## パッケージングエクスポートディレクトリ
path_app="../app"
## の作業ディレクトリビルドディレクトリ.gitignore無視を追加する
path_build="build"
path_archive="${path_build}/${project}.xcarchive"
path_export_options="${path_build}/ExportOptions.plist"
if [ -d "${path_build}" ]
then
echo " ${path_build} "
else
echo "ディレクトリを作成する${path_build}"
mkdir -pv "${path_build}"
fi
funcExpertOptionFile() {
if [ -f "$path_export_options" ]
then
rm -rf "$path_export_options"
fi
/usr/libexec/PlistBuddy -c "Add :compileBitcode bool $compileBitcode" "$path_export_options"
/usr/libexec/PlistBuddy -c "Add :signingStyle string $signingStyle" "$path_export_options"
/usr/libexec/PlistBuddy -c "Add :method string $methodStyle" "$path_export_options"
}
## ExportOptionsを作成する.plist
funcExpertOptionFile
if $workspace_flag
then
## プロジェクトをクリーンアップする
xcodebuild clean -workspace ${project}.xcworkspace \
-scheme ${project} \
-configuration ${configuration}
##
xcodebuild archive -workspace ${project}.xcworkspace \
-scheme ${project} \
-configuration ${configuration} \
-archivePath ${path_archive}
else
## プロジェクトをクリーンアップする
xcodebuild clean -project ${project}.xcworkspace \
-scheme ${project} \
-configuration ${configuration}
##
xcodebuild archive -project ${project}.xcworkspace \
-scheme ${project} \
-configuration ${configuration} \
-archivePath ${path_archive}
fi
## 判定結果をアーカイブする
if [ -d "${path_archive}" ]
then
echo "** Finished archive. Elapsed time: ${SECONDS}s **"
echo
else
exit 1
fi
## ipaをエクスポートする
xcodebuild -exportArchive \
-archivePath ${path_archive} \
-exportPath ${path_app} \
-exportOptionsPlist ${path_export_options}
## ipa
file_ipa="${path_app}/${project}-$(date "+%Y%m%d%H%M").ipa"
mv "${path_app}/${project}.ipa" "${file_ipa}"
## エクスポートipaの結果を判断する
if [ -f "${file_ipa}" ]
then
echo "** Finished export. Elapsed time: ${SECONDS}s **"
rm -rf "$path_build"
echo $file_ipa
say "iOSパッケージ化に成功する"
if [[ -n "${pgyer_api_key}" ]]
then
#pgyerにアップロードする
echo "Dandelionにアップロードされている..."
echo
curl -F "file=@${file_ipa}" -F "_api_key=${pgyer_api_key}" -F "buildInstallType=2" -F "buildPassword=${pgyer_pwd}" -F "buildUpdateDescription=スクリプトが自動的にアップロードされた" https://..///ad
# rm -rf ${file_ipa}
echo
say "iOS正常にタンポポをアップロードする"
echo
if [[ -n "${pgyer_subfix_url}" ]]
then
open https://..om/${__rl}
fi
else
open $path_app
fi
else
echo "エラーが発生し、エラーの原因を見つけるためにXcodeを開く"
say "iOSパッケージングの失敗"
exit 1
fi
echo "------------------------------------------------------------------------------"
echo " Congrats"
echo " ${project} successfully published"
echo " Finished. Elapsed time: ${SECONDS}s"
echo " https://..io"
echo " Tell your friends!"
echo "------------------------------------------------------------------------------"
echo
cd ..
}
##==================================apk==================================
if [[ ${platform} -ne 2 ]]; then
echo "ビルドapkを開始する"
flutter build apk $obfuscate --release --verbose #--no-codesign
echo "build apk "
file_apk=android-$(date "+%Y%m%d%H%M").apk
cp -r build/app/outputs/apk/release/app-release.apk app/$file_apk
if [[ -f app/${file_apk} ]]
then
say "androidパッケージ化に成功する"
if [[ -n "${pgyer_api_key}" ]]
then
#pgyerにアップロードする
echo "Dandelionにアップロードされている..."
echo
curl -F "file=@app/${file_apk}" -F "_api_key=${pgyer_api_key}" -F "buildInstallType=2" -F "buildPassword=${pgyer_pwd}" -F "buildUpdateDescription=スクリプトが自動的にアップロードされた" https://..///ad
# rm -rf app/${file_ipa}
echo
say "android正常にタンポポをアップロードする"
echo
if [[ -n "${pgyer_subfix_url}" ]]
then
open https://..om/${__rl}
fi
else
open app
fi
else
echo "エラーが発生し、エラーの原因を見つけるためにAndroid Studioを開く"
say "androidパッケージングの失敗"
fi
echo " Finished. Elapsed time: ${SECONDS}s"
fi
##==================================apk==================================
##==================================ipa==================================
if [[ ${platform} -ne 1 ]]; then
echo "iosのビルドを開始する"
flutter build ios $obfuscate --release --verbose #--no-codesign
echo "build ios "
build_ios
fi
##==================================ipa==================================