| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 #!/bin/sh |  | 
| 2 |  | 
| 3 set -e # abort on error |  | 
| 4 set -x # expand and print executed commands |  | 
| 5 |  | 
| 6 SDK_DEVICE=$1 |  | 
| 7 SDK_VERSION=$2 |  | 
| 8 SDK="${SDK_DEVICE}${SDK_VERSION}" |  | 
| 9 |  | 
| 10 IOS_SIMULATOR_VERSION=${3:-SDK_VERSION} |  | 
| 11 |  | 
| 12 # This is redirecting all output to file. Which means that stdout gets nothing. |  | 
| 13 # And in particular environment of CircleCI, it's a Good Thing for couple of rea
     sons: |  | 
| 14 # - CCI web UI is extremely slow when trying to display a lengthy build log |  | 
| 15 # - even if the log is displayed, it's limited to first 400k chars |  | 
| 16 # - the system allows downloading the log, but only first 4M of it |  | 
| 17 # - even if the error happens in first 400k, the system rarely detects it correc
     tly, pointing |  | 
| 18 # at irrelevant warnings or noncritical errors instead. It may not be completely
      a CCI fault |  | 
| 19 # as xcodebuild output is quite cryptic (so cryptic that it warrants xcrun exist
     ence). |  | 
| 20 LOGFILE="${CIRCLE_ARTIFACTS}/build_${SDK}.log" |  | 
| 21 exec > $LOGFILE 2>&1 |  | 
| 22 |  | 
| 23 # xcodebuild default build path must be overridden because it stores |  | 
| 24 # the compilation products at a cryptic temporary path but we need |  | 
| 25 # to copy it away for archivation and deployment |  | 
| 26 BUILD_DIR=$PWD/$SDK |  | 
| 27 |  | 
| 28 CI_BUILD_NUMBER=${CIRCLE_BUILD_NUM} |  | 
| 29 CI_VERSION_NUMBER=${APP_VERSION} |  | 
| 30 |  | 
| 31 # Resulting build artifact name (ending with .app, .ipa, .dSYM and whatever) |  | 
| 32 ARTIFACT_NAME="${XCODE_SCHEME}-${SDK}-${CI_BUILD_NUMBER}" |  | 
| 33 |  | 
| 34 # Keep an eye on used ruby version, in case future Xcode/Circle updates |  | 
| 35 # introduce incompatible expectations again |  | 
| 36 ruby -v |  | 
| 37 |  | 
| 38 # Note to the following construction and usage of ARTIFACT_DIR: |  | 
| 39 # It is effectively the same folder as CONFIGURATION_BUILD_DIR made from |  | 
| 40 # ${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}. But CONFIGURATION_BUILD_DIR is ign
     ored in |  | 
| 41 # "Copy Pod Resources" step since Pods 1.0 - the path is constructed directly fr
     om $BUILD_DIR. |  | 
| 42 # Custom CONFIGURATION_BUILD_DIR results in builds landing in custom location bu
     t then being |  | 
| 43 # attempted to copy from a different location based on $BUILD_DIR. |  | 
| 44 # So BUILD_DIR, the root var of all config must be modified, and the resulting |  | 
| 45 # CONFIGURATION_BUILD_DIR then constructed manually. |  | 
| 46 # https://github.com/CocoaPods/CocoaPods/issues/5358 |  | 
| 47 |  | 
| 48 case $SDK in |  | 
| 49   iphonesimulator*) |  | 
| 50     CONFIGURATION=Debug |  | 
| 51 # BUILD TEST |  | 
| 52     xcodebuild \ |  | 
| 53     -sdk $SDK \ |  | 
| 54     -workspace "$XCODE_WORKSPACE" \ |  | 
| 55     -scheme "$XCODE_SCHEME" \ |  | 
| 56     -configuration "$CONFIGURATION" \ |  | 
| 57     -destination "platform=iOS Simulator,name=iPhone SE,OS=${IOS_SIMULATOR_VERSI
     ON}" \ |  | 
| 58     BUILD_DIR=$BUILD_DIR \ |  | 
| 59     CI_BUILD_NUMBER=$CI_BUILD_NUMBER \ |  | 
| 60     CI_VERSION_NUMBER=$CI_VERSION_NUMBER \ |  | 
| 61     test # build-test has the main build in its xcodeproj dependencies |  | 
| 62 # ZIP AND COPY APP so that it's downloadable from artifacts |  | 
| 63    ARTIFACT_DIR=$BUILD_DIR/${CONFIGURATION}-iphonesimulator |  | 
| 64    ditto -ck --keepParent --norsrc "${ARTIFACT_DIR}/${XCODE_SCHEME}.app" "$CIRCL
     E_ARTIFACTS/${ARTIFACT_NAME}.zip" |  | 
| 65   ;; |  | 
| 66   iphoneos*) |  | 
| 67 # BUILD PRODUCT |  | 
| 68     CONFIGURATION=Devbuild |  | 
| 69     # Specific name for archive |  | 
| 70     ARTIFACT_DIR=$BUILD_DIR/${CONFIGURATION}-iphoneos |  | 
| 71     ARCHIVE_NAME="${ARTIFACT_DIR}/${ARTIFACT_NAME}.xcarchive" |  | 
| 72     # The folder where exported IPA is stored |  | 
| 73     IPA_LOCATION="${ARTIFACT_DIR}/${ARTIFACT_NAME}" |  | 
| 74     xcodebuild \ |  | 
| 75     -sdk $SDK \ |  | 
| 76     -workspace "$XCODE_WORKSPACE" \ |  | 
| 77     -scheme "$XCODE_SCHEME" \ |  | 
| 78     -configuration "$CONFIGURATION" \ |  | 
| 79     -archivePath "$ARCHIVE_NAME" \ |  | 
| 80     BUILD_DIR=$BUILD_DIR \ |  | 
| 81     CI_BUILD_NUMBER=$CI_BUILD_NUMBER \ |  | 
| 82     CI_VERSION_NUMBER=$CI_VERSION_NUMBER \ |  | 
| 83     archive # no test |  | 
| 84     if [ "$CIRCLE_BRANCH" == "master" ]; then |  | 
| 85       echo "Branch '${CIRCLE_BRANCH}', packing xcarchive to artifacts" |  | 
| 86       # zip the archive and save it to artifacts |  | 
| 87       # @TODO upload to Eyeo signing service |  | 
| 88       ditto -ck --keepParent --norsrc "$ARCHIVE_NAME" "${ARCHIVE_NAME}.zip" |  | 
| 89       cp ${ARCHIVE_NAME}.zip $CIRCLE_ARTIFACTS |  | 
| 90     else |  | 
| 91       echo "Branch '${CIRCLE_BRANCH}', exporting xcarchive to IPA" |  | 
| 92       # Export the built xcarchive as IPA |  | 
| 93       # |  | 
| 94       # One would be tempted to add -exportSigningIdentity parameter here, but |  | 
| 95       # xcodebuild actively fights it with error: |  | 
| 96       # "The flag -exportSigningIdentity cannot be specified along with -exportO
     ptionsPlist" |  | 
| 97       # where -exportOptionsPlist is mandated by warning: |  | 
| 98       # "exportArchive without -exportOptionsPlist is deprecated" |  | 
| 99       # SO we must trust xcodebuild export to map all signing assets correctly |  | 
| 100       # In CI environment, it has only one cert and a minimal necessary provisio
     ning available |  | 
| 101       # but on real world devbox with half a dozen of each it could be a problem |  | 
| 102       xcodebuild \ |  | 
| 103       -exportArchive \ |  | 
| 104       -exportOptionsPlist "$HOME/$CIRCLE_PROJECT_REPONAME/deploy/ExportOptions.p
     list" \ |  | 
| 105       -archivePath "$ARCHIVE_NAME" \ |  | 
| 106       -exportPath "$IPA_LOCATION" # Path is a folder, NOT THE IPA FILENAME ITSEL
     F! |  | 
| 107       # Copy to Circle artifacts. The source name is fixed by xcodebuild |  | 
| 108       cp "${IPA_LOCATION}/${XCODE_SCHEME}.ipa" "${CIRCLE_ARTIFACTS}/${ARTIFACT_N
     AME}.ipa" |  | 
| 109       # For some reason, dSYMs are not in xcarchive but left in the build dir |  | 
| 110       mv ${ARTIFACT_DIR}/*.dSYM ${ARCHIVE_NAME}/dSYMs |  | 
| 111       # ZIP DSYMs directly to Circle artifacts |  | 
| 112       # ditto creates Finder-compress-compatible package, where Apple service ma
     y have a problem accepting plain pkzip |  | 
| 113       ditto -ck --keepParent --rsrc --sequesterRsrc "${ARCHIVE_NAME}/dSYMs" "$CI
     RCLE_ARTIFACTS/${ARTIFACT_NAME}.dSYM.zip" |  | 
| 114       # UPLOAD AND CLEAN |  | 
| 115       $HOME/$CIRCLE_PROJECT_REPONAME/deploy/hockey.sh \ |  | 
| 116       "${CIRCLE_ARTIFACTS}/${ARTIFACT_NAME}.ipa" \ |  | 
| 117       "${CIRCLE_ARTIFACTS}/${ARTIFACT_NAME}.dSYM.zip" |  | 
| 118     fi |  | 
| 119   ;; |  | 
| 120 esac |  | 
| OLD | NEW | 
|---|