Skip to content

Commit 5a90bd3

Browse files
committed
Deploy Carthage binary on Travis
1 parent 17b5ea8 commit 5a90bd3

File tree

2 files changed

+172
-7
lines changed

2 files changed

+172
-7
lines changed

.travis.yml

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,60 @@
1+
osx_image: xcode9
12
language: objective-c
2-
osx_image: xcode9.0
3-
sudo: false
4-
rvm:
5-
- 2.3
3+
sudo: required
4+
env:
5+
global:
6+
- PROJECT="RxKeyboard.xcodeproj"
7+
- SCHEME="RxKeyboard"
8+
- IOS_SDK="iphonesimulator11.0"
9+
- MACOS_SDK="macosx10.13"
10+
- TVOS_SDK="appletvsimulator11.0"
11+
- WATCHOS_SDK="watchsimulator4.0"
12+
matrix:
13+
- SDK="$IOS_SDK" TEST=1 DESTINATION="platform=iOS Simulator,name=iPhone 8,OS=11.0"
614

7-
cache:
8-
- bundler
9-
- cocoapods
15+
install:
16+
- eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/9f442512a46d7a2af7b850d65a7e9bd31edfb09b/swiftenv-install.sh)"
17+
- swift --version
18+
19+
before_script:
20+
- set -o pipefail
21+
- swift package generate-xcodeproj
1022

1123
script:
24+
- if [ $TEST == 1 ]; then
25+
xcodebuild clean build test
26+
-project "$PROJECT"
27+
-scheme "$SCHEME"
28+
-sdk "$SDK"
29+
-destination "$DESTINATION"
30+
-configuration Debug
31+
-enableCodeCoverage YES
32+
CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty -c;
33+
else
34+
xcodebuild clean build
35+
-project "$PROJECT"
36+
-scheme "$SCHEME"
37+
-sdk "$SDK"
38+
-destination "$DESTINATION"
39+
-configuration Debug
40+
CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO | xcpretty -c;
41+
fi
1242
- bundle exec pod lib lint --verbose --allow-warnings --fail-fast
43+
44+
before_deploy:
45+
- ruby ./scripts/carthage_helper.rb prepare_xcconfig
46+
- swift package generate-xcodeproj --xcconfig-overrides Config.xcconfig
47+
- carthage build --no-skip-current
48+
- ruby ./scripts/carthage_helper.rb modify_info
49+
- carthage archive RxKeyboard
50+
51+
deploy:
52+
provider: releases
53+
api_key:
54+
secure: Mg3Ht793cYEBKi/aZF/zhdPLnn76xzUxarA2VyFTYQRlsZ3w5dZLBWMe8afYgZ5mu4hFa/2HDSVa84jC6WWdTGV0JQ86Q1mTRi5Ka18SaZbIZYIvhF5atO9/MQ/xNw0dfiGEZsMBxEk/+BObYuVD40DK35phnfCKqPmPCNEuaRKiBFIkRhwavjgChqbJM4gdrBcO6aJCpGc5iNmjwSEvzGsbY0kB7sWaLRXatGM3REWZEvCGIB4ZoRckKu4UXN6X6uCFdpZ2q3bp4pspE8jT2y8Y8gP/cVsM8zUpMPuG95F0SVJMWTmi1x71/jQbbUkIqV3+bu1SWSOUmhfow7LOP7HW0Vv4Jpm26pWDQdpEk96tZWPvX6xBvqzRdxWEGlHKnM5llMMbKHy7sX4l72NdvoB9MZKyO6I3hjDrXzaqwtqrzWMHMQI8ZVaZenXsm+FZeLjvTBQ+BG9RHJz2wTwJvK8EQJHfd6vM2Fi4SGgKvXAWfrBJh/HDSrGrrrQZWteHMUu0tUzaLRtEnZELhqcHGsCv5VGb1+MDOMW8tp+vNx5pyb+H2QvbYuQaCWsKDu+ghjm4zilWxfdBD4GRvJViZA2Z0mwoOiZmTf4HhzUemv1/4W/SuPnNgVa7D+WqDbAFCQVPAosu1pCUi5mjjzvOBIbvoLvQd5t28YQ+WFzmjMM=
55+
file: "$FRAMEWORK.framework.zip"
56+
skip_cleanup: true
57+
on:
58+
repo: RxSwiftCommunity/RxKeyboard
59+
tags: true
60+
condition: $SDK = $IOS_SDK

scripts/carthage_helper.rb

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
require "xcodeproj"
2+
3+
PACKAGE_NAME = "RxKeyboard"
4+
5+
module Pod
6+
class OS
7+
attr_accessor :deployment_target
8+
end
9+
10+
class Spec
11+
attr_accessor :version
12+
attr_accessor :ios
13+
attr_accessor :osx
14+
attr_accessor :tvos
15+
attr_accessor :watchos
16+
17+
def initialize
18+
@ios = OS.new
19+
@osx = OS.new
20+
@tvos = OS.new
21+
@watchos = OS.new
22+
yield self if block_given?
23+
end
24+
25+
def method_missing(*args)
26+
end
27+
end
28+
end
29+
30+
def read_podspec
31+
podspec_path = "#{PACKAGE_NAME}.podspec"
32+
podspec_content = open(podspec_path).read
33+
podspec = eval podspec_content
34+
return podspec
35+
end
36+
37+
def run(command)
38+
puts command
39+
r = `#{command} 2>&1`.strip
40+
puts r if r and r.length > 0
41+
return r
42+
end
43+
44+
def prepare_xcconfig
45+
@config = "Config.xcconfig"
46+
podspec = read_podspec()
47+
ios_version = podspec.ios.deployment_target
48+
macos_version = podspec.osx.deployment_target
49+
tvos_version = podspec.tvos.deployment_target
50+
watchos_version = podspec.watchos.deployment_target
51+
52+
def add_config(key, value)
53+
run "echo '#{key} = #{value}' >> #{@config}"
54+
end
55+
56+
run "test -e #{@config} && rm #{@config}"
57+
add_config("IPHONEOS_DEPLOYMENT_TARGET", ios_version) if ios_version
58+
add_config("MACOSX_DEPLOYMENT_TARGET", macos_version) if macos_version
59+
add_config("TVOS_DEPLOYMENT_TARGET", tvos_version) if tvos_version
60+
add_config("WATCHOS_DEPLOYMENT_TARGET", watchos_version) if watchos_version
61+
end
62+
63+
def modify_info
64+
def plistbuddy(info, command)
65+
return "/usr/libexec/PlistBuddy -c \"#{command}\" #{info}"
66+
end
67+
68+
def plist_set(info, key, value)
69+
r = run plistbuddy(info, "Set #{key} #{value}")
70+
if r.include? "Not Exist"
71+
run plistbuddy(info, "Add #{key} string #{value}")
72+
end
73+
end
74+
75+
podspec = read_podspec()
76+
version = podspec.version
77+
ios_version = podspec.ios.deployment_target
78+
macos_version = podspec.osx.deployment_target
79+
tvos_version = podspec.tvos.deployment_target
80+
watchos_version = podspec.watchos.deployment_target
81+
82+
framework = "#{PACKAGE_NAME}.framework"
83+
ios_info = "./Carthage/Build/iOS/#{framework}/Info.plist"
84+
macos_info = "./Carthage/Build/Mac/#{framework}/Resources/Info.plist"
85+
tvos_info = "./Carthage/Build/tvOS/#{framework}/Info.plist"
86+
watchos_info = "./Carthage/Build/watchOS/#{framework}/Info.plist"
87+
88+
plist_set(ios_info, "CFBundleVersion", version) if ios_version
89+
plist_set(macos_info, "CFBundleVersion", version) if macos_version
90+
plist_set(tvos_info, "CFBundleVersion", version) if tvos_version
91+
plist_set(watchos_info, "CFBundleVersion", version) if watchos_version
92+
end
93+
94+
def remove_framework(target_name, framework_name)
95+
project = Xcodeproj::Project.open("#{PACKAGE_NAME}.xcodeproj") or return
96+
target = project.targets.find { |t| t.name == target_name } or return
97+
phase = target.build_phases.find { |p|
98+
p.kind_of?(Xcodeproj::Project::Object::PBXFrameworksBuildPhase)
99+
} or return
100+
file = phase.files_references.find { |f|
101+
f.path == framework_name
102+
} or return
103+
phase.remove_file_reference(file)
104+
project.save
105+
end
106+
107+
case ARGV.first
108+
when "prepare_xcconfig"
109+
prepare_xcconfig()
110+
111+
when "modify_info"
112+
modify_info()
113+
114+
when "remove_unnecessary_frameworks"
115+
remove_framework(PACKAGE_NAME, "RxBlocking.framework")
116+
remove_framework(PACKAGE_NAME, "RxCocoaRuntime.framework")
117+
end

0 commit comments

Comments
 (0)