diff --git a/Jenkinsfile-ios b/Jenkinsfile-ios index 8bdfc5e9..55f35511 100644 --- a/Jenkinsfile-ios +++ b/Jenkinsfile-ios @@ -82,146 +82,12 @@ pipeline { echo "✅ 版本号:${env.versionCode}" } } - stage('安装证书 & 描述文件') { - steps { - echo "# =============== 安装 p12 证书 ===============" - sh ''' - security unlock-keychain -p ${MAC_LOGIN_PWD} ~/Library/Keychains/login.keychain-db >/dev/null 2>&1 - security import ${P12_FILE} -k ~/Library/Keychains/login.keychain-db -P ${P12_PASSWORD} -A >/dev/null 2>&1 - security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k ${MAC_LOGIN_PWD} ~/Library/Keychains/login.keychain-db >/dev/null 2>&1 - ''' - echo "# =============== 安装描述文件 ===============" - sh ''' - mkdir -p "$HOME/Library/MobileDevice/Provisioning Profiles" - cp "${PROFILE_FILE}" "$HOME/Library/MobileDevice/Provisioning Profiles/" - ''' - } - } - stage('打包uniapp') { - steps { - sh "npm run build:app-plus:${env.BRANCH_NAME}" - } - } - stage('复制UniApp资源到目录') { - steps { - echo "开始复制 dist 资源到 ${ASSETS_DIR}" - // 先创建目标目录(防止目录不存在报错) - sh "mkdir -p ${ASSETS_DIR}" - // 把 dist 里所有文件 复制 到安卓资源目录(推荐) - sh "cp -rf dist/build/app/* ${ASSETS_DIR}/" - echo "✅ 资源复制完成" - } - } - stage('️清理旧构建内容') { - steps { - sh """ - xcodebuild clean \\ - -project ${APP_DIR}/${PROJECT_NAME}.xcodeproj \\ - -scheme ${SCHEME_NAME} \\ - -configuration ${CONFIGURATION} - """ - - } - } - stage('创建SDK软链接') { - steps { - sh ''' - # 删除旧的软链接/目录 - rm -rf "${TARGET_LINK}" - - # 创建软链接(不进入任何目录) - ln -s "${SOURCE_SDK}" "${TARGET_LINK}" - - # 验证链接是否生效 - ls -la "${TARGET_LINK}" - ''' - } - } - stage('✅ 开始归档(静默模式)') { - steps { - script { - // Groovy 里拼接命令,随便写注释,不会影响 shell - def xcodeCommand = [ - 'xcodebuild archive', - // 项目路径 - "-project ${APP_DIR}/${PROJECT_NAME}.xcodeproj", - // Scheme 配置 - "-scheme ${SCHEME_NAME}", - // 编译模式 Release/Debug - "-configuration ${CONFIGURATION}", - // 归档输出路径 - "-archivePath ${ARCHIVE_PATH}", - // 平台通用 iOS - "-destination generic/platform=iOS", - // 版本号 - "MARKETING_VERSION=${versionName}", - "CURRENT_PROJECT_VERSION=${versionCode}", - - // 手动签名 - "CODE_SIGN_STYLE=Manual", - "CODE_SIGN_IDENTITY='${CERTIFICATE_NAME}'", - "PROVISIONING_PROFILE_SPECIFIER='${PROVISIONING_PROFILE_UUID}'", - "PROVISIONING_PROFILE='${PROVISIONING_PROFILE_UUID}'", - "DEVELOPMENT_TEAM='${DEVELOPMENT_TEAM}'", - - // 钥匙串 - "OTHER_CODE_SIGN_FLAGS='--keychain ~/Library/Keychains/login.keychain-db'", - - // 编译所有架构 - "ONLY_ACTIVE_ARCH=NO", - - // 清空编译参数 - "OTHER_CFLAGS=''", - "OTHER_CPLUSPLUS_FLAGS=''", - "OTHER_SWIFT_FLAGS=''", - "> /dev/null 2>&1" - ].join(' ') // 拼接成一行完整命令 - // 打印最终命令 - echo "执行命令:${xcodeCommand}" - // 执行! - sh(xcodeCommand) - } - } - } - stage('✅ 开始导出 IPA安装包') { - steps { - sh ''' - xcodebuild -exportArchive \\ - -archivePath ${ARCHIVE_PATH} \\ - -exportPath ${APP_DIR}/build \\ - -exportOptionsPlist ${EXPORT_OPTIONS_PLIST} \\ - -allowProvisioningUpdates - ''' - } - } - stage('🚀 验证并上传 TestFlight') { - steps { - echo "✅ 开始验证 IPA 有效性" - sh ''' - mkdir -p $HOME/private_keys - cp -f "${P8_FILE}" $HOME/private_keys/ - ''' - // 1. 先验证 IPA(必须这一步,提前拦截错误) - sh """ - xcrun altool --validate-app \\ - --file ${APP_DIR}/build/${SCHEME_NAME}.ipa \\ - --type ${API_TYPE} \\ - --apiKey ${API_KEY} \\ - --apiIssuer ${API_ISSUER} - """ - - echo "✅ IPA 验证成功!开始上传到 TestFlight" - - - echo "🎉 全部完成!请到 App Store Connect TestFlight 查看构建" - } - } stage('🔐 生成 JWT') { steps { script { JWT_TOKEN = sh( - script: 'node scripts/generate-asc-jwt.js', + script: "node ${CERT_DIR}/generate-asc-jwt.js", returnStdout: true ).trim() }