Skip to content

Instantly share code, notes, and snippets.

@setap
Last active January 5, 2017 12:58
Show Gist options
  • Select an option

  • Save setap/60331e6a3c5069fc9dfd65e4fc15bcdf to your computer and use it in GitHub Desktop.

Select an option

Save setap/60331e6a3c5069fc9dfd65e4fc15bcdf to your computer and use it in GitHub Desktop.
build ios app
<?xml version="1.0" encoding="utf-8"?>
<project name="FriendMobile" default="repository" basedir=".">
<property name="workdir" value="${teamcity.build.workingDir}" />
<property name="project.name" value="FriendMobile"/>
<property name="project.bundle.identifier" value="ru.sberbank.friendmobile"/>
<property name="env" value="${teamcity.buildConfName}"/>
<property name="ftp.server" value=""/>
<property name="ftp.port" value="21"/>
<property name="ftp.user" value=""/>
<property name="ftp.password" value=""/>
<property name="ftp.remote.dir" value="/"/>
<property name="base.path" value="/Users/Shared/build"/>
<property name="path.release" value="${base.path}/${project.name}/ios/repository"/>
<property name="path.out" value="${base.path}/${project.name}/ios/${env}/last"/>
<property name="path.env" value="/${base.path}/${project.name}/ios/${env}"/>
<property name="path.ipa" value="${path.out}/build"/>
<property name="path.old.plist" value="${path.out}/arch/${project.name}.xcarchive"/>
<property name="path.new.plist" value="${workdir}/${project.name}/Info.plist"/>
<property name="codeSignIdentity" value="" />
<property name="targetedDeviceFamily" value="1" />
<!-- Mapping: property_[TeamCity Project configuration name].plist -->
<target name="release" depends="setupEnvironment,repository"/>
<target name="dev" depends="setupEnvironment,setupBuildProperties,archivePackage,sentToFTP, copyVersion"/>
<target name="st" depends="setupEnvironment,setupBuildProperties,archivePackage,copyVersion"/>
<target name="ift" depends="setupEnvironment,setupBuildProperties,archivePackage, copyVersion"/>
<target name="psi" depends="setupEnvironment,setupBuildProperties,archivePackage, copyVersion"/>
<target name="prod" depends="setupEnvironment,setupBuildProperties,archivePackage, copyVersion"/>
<target name="setupEnvironment">
<delete dir="${path.out}"/>
<mkdir dir="${path.out}/build"/>
<mkdir dir="${path.out}/test"/>
<mkdir dir="${path.out}/arch"/>
<exec executable="/usr/libexec/PlistBuddy" outputproperty="build.version">
<arg value="-c"/>
<arg value="Print CFBundleShortVersionString"/>
<arg value="${path.new.plist}"/>
</exec>
</target>
<target name="setupBuildProperties">
<!-- Заменить property.plist в архиве -->
<delete file="${workdir}/FriendMobile/Config/property.plist"/>
<copy file="${workdir}/FriendMobile/Config/property_${env}.plist" tofile="${workdir}/FriendMobile/Config/property.plist" />
<!-- Изменить название сборки -->
<exec executable="/usr/libexec/PlistBuddy" outputproperty="bundle.display.name">
<arg value="-c"/>
<arg value="Print CFBundleDisplayName"/>
<arg value="${workdir}/FriendMobile/Config/property.plist"/>
</exec>
<exec executable="/usr/libexec/PlistBuddy">
<arg value="-c"/>
<arg value="Set CFBundleDisplayName ${bundle.display.name}"/>
<arg value="${path.new.plist}"/>
</exec>
<!-- Скопировать release.txt -->
<copy file="${workdir}/release.txt" tofile="${path.out}/build/release.txt"/>
</target>
<target name="archivePackage" depends="buildPackage">
<exec executable="xcrun">
<arg value="xcodebuild"/>
<arg value="-exportArchive"/>
<arg value="-exportOptionsPlist"/>
<arg value="export.plist"/>
<arg value="-archivePath"/>
<arg value="${path.out}/arch/${project.name}.xcarchive"/>
<arg value="-exportPath"/>
<arg value="${path.ipa}"/>
</exec>
<!-- ! Переименовать манифест на FriendMobile.plist -->
<move file="${path.ipa}/manifest.plist" tofile="${path.ipa}/${project.name}.plist"/>
</target>
<target name="sentToFTP">
<ftp server="${ftp.server}"
port="${ftp.port}"
remotedir="${ftp.remote.dir}"
userid="${ftp.user}"
password="${ftp.password}"
binary="yes">
<fileset dir="${path.ipa}/">
<include name="*"/>
</fileset>
<fileset dir="${workdir}/">
<include name="release.txt"/>
</fileset>
</ftp>
</target>
<target name="copyVersion">
<mkdir dir="${path.env}/${build.version}"/>
<copy todir="${path.env}/${build.version}">
<fileset dir="${path.out}"/>
</copy>
<echo message="##teamcity[buildNumber '${build.version}']"/>
<echo message="##teamcity[buildStatus status='SUCCESS' text='New version ${build.version}']"/>
</target>
<target name="buildPackage">
<exec executable="/bin/rm">
<arg value="-rf"/>
<arg value="${workdir}/Pods"/>
</exec>
<exec dir="${workdir}" executable="/usr/local/bin/pod">
<arg value="install"/>
</exec>
<exec executable="xcodebuild">
<arg value="-workspace"/>
<arg value="${workdir}/${project.name}.xcworkspace"/>
<arg value="-scheme"/>
<arg value="${project.name}"/>
<arg value="-configuration"/>
<arg value="Release"/>
<arg value="-archivePath"/>
<arg value="${path.out}/arch/${project.name}.xcarchive"/>
<arg value="DEPLOYMENT_POSTPROCESSING=YES"/>
<arg value="STRIP_INSTALLED_PRODUCT=YES"/>
<arg value="SEPARATE_STRIP=YES"/>
<arg value="COPY_PHASE_STRIP=YES"/>
<arg value="TARGETED_DEVICE_FAMILY=${targetedDeviceFamily}"/>
<arg value="archive"/>
</exec>
</target>
<target name="repository" depends="buildPackage">
<delete dir="${path.release}/${build.version}"/>
<mkdir dir="${path.release}/${build.version}"/>
<mkdir dir="${path.release}/${build.version}/prod"/>
<mkdir dir="${path.release}/${build.version}/psi"/>
<mkdir dir="${path.release}/${build.version}/ift"/>
<!-- Скопировать архив -->
<copy todir="${path.release}/${build.version}/prod">
<fileset dir="${path.out}/arch"/>
</copy>
<copy todir="${path.release}/${build.version}/psi">
<fileset dir="${path.out}/arch"/>
</copy>
<copy todir="${path.release}/${build.version}/ift">
<fileset dir="${path.out}/arch"/>
</copy>
<!-- Скопировать release.txt -->
<copy file="${path.out}/arch/${project.name}.xcarchive/Products/Applications/${project.name}.app/release.txt" tofile="${path.release}/${build.version}/prod/release.txt"/>
<copy file="${path.out}/arch/${project.name}.xcarchive/Products/Applications/${project.name}.app/release.txt" tofile="${path.release}/${build.version}/psi/release.txt"/>
<copy file="${path.out}/arch/${project.name}.xcarchive/Products/Applications/${project.name}.app/release.txt" tofile="${path.release}/${build.version}/ift/release.txt"/>
<!-- Заменить property.plist в архиве -->
<copy overwrite="true" file="${path.release}/${build.version}/prod/${project.name}.xcarchive/Products/Applications/${project.name}.app/property_prod.plist" tofile="${path.release}/${build.version}/prod/${project.name}.xcarchive/Products/Applications/${project.name}.app/property.plist" />
<copy overwrite="true" file="${path.release}/${build.version}/psi/${project.name}.xcarchive/Products/Applications/${project.name}.app/property_psi.plist" tofile="${path.release}/${build.version}/psi/${project.name}.xcarchive/Products/Applications/${project.name}.app/property.plist" />
<copy overwrite="true" file="${path.release}/${build.version}/ift/${project.name}.xcarchive/Products/Applications/${project.name}.app/property_ift.plist" tofile="${path.release}/${build.version}/ift/${project.name}.xcarchive/Products/Applications/${project.name}.app/property.plist" />
<!-- Изменить название сборки -->
<exec executable="/usr/libexec/PlistBuddy">
<arg value="-c"/>
<arg value="Set CFBundleDisplayName Мой ДРУГ"/>
<arg value="${path.release}/${build.version}/prod/${project.name}.xcarchive/Products/Applications/${project.name}.app/Info.plist"/>
</exec>
<exec executable="/usr/libexec/PlistBuddy">
<arg value="-c"/>
<arg value="Set CFBundleDisplayName ПСИ"/>
<arg value="${path.release}/${build.version}/psi/${project.name}.xcarchive/Products/Applications/${project.name}.app/Info.plist"/>
</exec>
<exec executable="/usr/libexec/PlistBuddy">
<arg value="-c"/>
<arg value="Set CFBundleDisplayName ИФТ"/>
<arg value="${path.release}/${build.version}/ift/${project.name}.xcarchive/Products/Applications/${project.name}.app/Info.plist"/>
</exec>
<!-- Повторно подписать .app -->
<exec executable="codesign">
<arg value="-f"/>
<arg value="-s"/>
<arg value="${codeSignIdentity}"/>
<arg value="${path.release}/${build.version}/prod/${project.name}.xcarchive/Products/Applications/${project.name}.app"/>
</exec>
<exec executable="codesign">
<arg value="-f"/>
<arg value="-s"/>
<arg value="${codeSignIdentity}"/>
<arg value="${path.release}/${build.version}/psi/${project.name}.xcarchive/Products/Applications/${project.name}.app"/>
</exec>
<exec executable="codesign">
<arg value="-f"/>
<arg value="-s"/>
<arg value="${codeSignIdentity}"/>
<arg value="${path.release}/${build.version}/ift/${project.name}.xcarchive/Products/Applications/${project.name}.app"/>
</exec>
<!-- Сделать .ipa и manifest.plist -->
<exec executable="xcrun">
<arg value="xcodebuild"/>
<arg value="-exportArchive"/>
<arg value="-exportOptionsPlist"/>
<arg value="export.plist"/>
<arg value="-archivePath"/>
<arg value="${path.release}/${build.version}/prod/${project.name}.xcarchive"/>
<arg value="-exportPath"/>
<arg value="${path.release}/${build.version}/prod/"/>
</exec>
<exec executable="xcrun">
<arg value="xcodebuild"/>
<arg value="-exportArchive"/>
<arg value="-exportOptionsPlist"/>
<arg value="export.plist"/>
<arg value="-archivePath"/>
<arg value="${path.release}/${build.version}/psi/${project.name}.xcarchive"/>
<arg value="-exportPath"/>
<arg value="${path.release}/${build.version}/psi/"/>
</exec>
<exec executable="xcrun">
<arg value="xcodebuild"/>
<arg value="-exportArchive"/>
<arg value="-exportOptionsPlist"/>
<arg value="export.plist"/>
<arg value="-archivePath"/>
<arg value="${path.release}/${build.version}/ift/${project.name}.xcarchive"/>
<arg value="-exportPath"/>
<arg value="${path.release}/${build.version}/ift/"/>
</exec>
<!-- ! Переименовать манифест на FriendMobile.plist -->
<move file="${path.release}/${build.version}/prod/manifest.plist" tofile="${path.release}/${build.version}/prod/${project.name}.plist"/>
<move file="${path.release}/${build.version}/psi/manifest.plist" tofile="${path.release}/${build.version}/psi/${project.name}.plist"/>
<move file="${path.release}/${build.version}/ift/manifest.plist" tofile="${path.release}/${build.version}/ift/${project.name}.plist"/>
<!-- Удалить архив из сборки -->
<delete dir="${path.release}/${build.version}/prod/${project.name}.xcarchive"/>
<delete dir="${path.release}/${build.version}/psi/${project.name}.xcarchive"/>
<delete dir="${path.release}/${build.version}/ift/${project.name}.xcarchive"/>
<!-- Подготовить pom.xml -->
<copy file="${path.release}/pom.xml" tofile="${path.release}/${build.version}/pom.xml"/>
<replace file="${path.release}/${build.version}/pom.xml" token="%version%" value="${build.version}"/>
<!-- Отправить в Nexus -->
<exec executable="mvn" dir="${path.release}/${build.version}">
<arg value="package"/> <!-- Заменить на deploy -->
</exec>
</target>
</project>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment