Skip to content

Instantly share code, notes, and snippets.

@gin0606
Created April 15, 2014 12:53
Show Gist options
  • Save gin0606/10730083 to your computer and use it in GitHub Desktop.
Save gin0606/10730083 to your computer and use it in GitHub Desktop.
require 'xcodeproj'
APP_NAME = 'APP_NAME'
BUILD_CONFIFURATION = 'Release'
CODE_SIGN_IDENTITY = 'iPhone Distribution'
PROJECT_PATH = "#{Dir.pwd}/#{APP_NAME}/proj.ios_mac/#{APP_NAME}.xcodeproj"
project = Xcodeproj::Project.open(PROJECT_PATH)
SCHEME = project.targets.find{|elem| elem.name == 'APP_NAME'}
APP_SCREEN_NAME = SCHEME.product_reference.display_name
KEYCHAIN_NAME = "ios-build.keychain"
PROVISIONING_PROFILES_PATH = "#{Dir.home}/Library/MobileDevice/Provisioning Profiles"
LOCAL_PROVISIONING_PROFILES_PATH = "#{Dir.pwd}/Provisioning_Profile"
APP_DST_PATH = "#{Dir.pwd}/build/#{BUILD_CONFIFURATION}"
desc "Run unit test"
task :utest do
if ENV['TRAVIS']
destination = 'name=iPhone Retina (3.5-inch),OS=7.0'
else
destination = 'name=iPhone Retina (3.5-inch),OS=7.1'
end
sh "xcodebuild -project #{PROJECT_PATH} -scheme '#{SCHEME.name}' -destination '#{destination}' test | xcpretty -c; exit ${PIPESTATUS[0]}"
end
task :build_ipa => ["certificates:download", "certificates:add"] do
remove_dir(APP_DST_PATH) if File.exists?(APP_DST_PATH)
adhoc_provisioning_path = "#{PROVISIONING_PROFILES_PATH}/#{adhoc_mobileprovision_file_name}"
sh "xcodebuild -project #{PROJECT_PATH} -scheme '#{SCHEME.name}' -sdk #{SCHEME.sdk} -configuration #{BUILD_CONFIFURATION} CODE_SIGN_IDENTITY='#{CODE_SIGN_IDENTITY}' CONFIGURATION_TEMP_DIR=#{APP_DST_PATH}/tmp CONFIGURATION_BUILD_DIR=#{APP_DST_PATH} clean build"
sh "xcrun -sdk #{SCHEME.sdk} PackageApplication '#{APP_DST_PATH}/#{APP_SCREEN_NAME}' -o #{APP_DST_PATH}/#{APP_NAME}.ipa -embed #{adhoc_provisioning_path}"
sh "zip -r '#{APP_DST_PATH}/#{APP_SCREEN_NAME}.dSYM.zip' '#{APP_DST_PATH}/#{APP_SCREEN_NAME}.dSYM'"
end
namespace :certificates do
desc "Download provisioning profile"
task :download do
FileUtils.rm(Dir.glob("#{LOCAL_PROVISIONING_PROFILES_PATH}/*"))
sh "bundle exec apple_dev_center.rb -u #{ENV['APPLE_DEV_CENTER_ID']} -p #{ENV['APPLE_DEV_CENTER_PASS']} -d #{LOCAL_PROVISIONING_PROFILES_PATH} -O /dev/null > /dev/null 2>&1"
end
desc "Add certificates"
task :add do
sh "security create-keychain -p travis #{KEYCHAIN_NAME}"
sh "security import #{Dir.pwd}/certificates/AppleWWDRCA.cer -k ~/Library/Keychains/#{KEYCHAIN_NAME} -T /usr/bin/codesign"
sh "security import #{Dir.pwd}/certificates/dist.cer -k ~/Library/Keychains/#{KEYCHAIN_NAME} -T /usr/bin/codesign"
sh "security import #{Dir.pwd}/certificates/dist.p12 -k ~/Library/Keychains/#{KEYCHAIN_NAME} -P #{ENV['CERTIFICATES_PASS']} -T /usr/bin/codesign"
sh "mkdir -p '#{PROVISIONING_PROFILES_PATH}'"
sh "cp '#{adhoc_mobileprovision_path}' '#{PROVISIONING_PROFILES_PATH}'"
end
desc "Remove certificates"
task :remove do
sh "security delete-keychain #{KEYCHAIN_NAME}"
FileUtils.rm("#{PROVISIONING_PROFILES_PATH}/#{adhoc_mobileprovision_file_name}")
end
end
def adhoc_mobileprovision_path
Dir.glob("#{LOCAL_PROVISIONING_PROFILES_PATH}/*_adhoc.mobileprovision")[0]
end
def adhoc_mobileprovision_file_name
File::basename(adhoc_mobileprovision_path)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment