shenzhen 0.10.3 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1ead2fd9d594767a8b28f6da8322a29343015963
4
- data.tar.gz: d6795ebc20d030efa593cefbfe1f15f912bf133f
3
+ metadata.gz: 8fb9c4da2e7420689c509c3effeeff0ef39f02c0
4
+ data.tar.gz: 813122a2540e9991ef978b600e07bdbc2ae807e8
5
5
  SHA512:
6
- metadata.gz: 7602a2cf16e4573a76a16ceb1ed97ec53716f353f6509025f65647649afc1bdb0aa4e12abb9eb96c93bf9d30459303d71165757b1b6c8d84d5e63552a62717b5
7
- data.tar.gz: 4e0ac10234d64d6f9d3306249bbcf1279c06eaf8f36ccb6d513aa19980a01516dd9d949ef019127037c260ddfe4dad8d7cdc79aab8f3d9a516cfd9f8adffe1f0
6
+ metadata.gz: 63de5ba58379dbd08736df16a244635b91a0a9fb9a40a59ad6846c67803985cda110f8b4c2a686189b3e9b9f74f5b2051414d5d4fb2fd51e98029dd30b5425bf
7
+ data.tar.gz: c94593552f7d8b7324ecc60529beb709ef4958312ae6faa32a104d83b90f29dc53d6d8f9b5885480fe364faf289bf6644a5a1a1864aaa1bec484ae4ea1b0d050
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- shenzhen (0.10.3)
4
+ shenzhen (0.11.0)
5
5
  aws-sdk (~> 1.0)
6
6
  commander (~> 4.1)
7
7
  dotenv (~> 0.7)
@@ -17,6 +17,7 @@ command :build do |c|
17
17
  c.option '-m', '--embed PROVISION', 'Sign .ipa file with .mobileprovision'
18
18
  c.option '-i', '--identity IDENTITY', 'Identity to be used along with --embed'
19
19
  c.option '--sdk SDK', 'use SDK as the name or path of the base SDK when building the project'
20
+ c.option '--ipa IPA', 'specify the name of the .ipa file to generate (including file extension)'
20
21
 
21
22
  c.action do |args, options|
22
23
  validate_xcode_version!
@@ -32,6 +33,7 @@ command :build do |c|
32
33
  @xcconfig = options.xcconfig
33
34
  @xcargs = options.xcargs
34
35
  @destination = options.destination || Dir.pwd
36
+ @ipa_name_override = options.ipa
35
37
  FileUtils.mkdir_p(@destination) unless File.directory?(@destination)
36
38
 
37
39
  determine_workspace_or_project! unless @workspace || @project
@@ -81,16 +83,45 @@ command :build do |c|
81
83
  @app_path = File.join(@xcodebuild_settings['BUILT_PRODUCTS_DIR'], @xcodebuild_settings['WRAPPER_NAME'])
82
84
  @dsym_path = @app_path + ".dSYM"
83
85
  @dsym_filename = File.expand_path("#{@xcodebuild_settings['WRAPPER_NAME']}.dSYM", @destination)
84
- @ipa_name = @xcodebuild_settings['WRAPPER_NAME'].gsub(@xcodebuild_settings['WRAPPER_SUFFIX'], "") + ".ipa"
86
+ @ipa_name = @ipa_name_override || @xcodebuild_settings['WRAPPER_NAME'].gsub(@xcodebuild_settings['WRAPPER_SUFFIX'], "") + ".ipa"
85
87
  @ipa_path = File.expand_path(@ipa_name, @destination)
86
88
 
87
89
  log "xcrun", "PackageApplication"
88
90
  abort unless system %{xcrun -sdk #{@sdk} PackageApplication -v "#{@app_path}" -o "#{@ipa_path}" --embed "#{options.embed || @dsym_path}" #{"-s \"#{options.identity}\"" if options.identity} #{'1> /dev/null' unless $verbose}}
89
91
 
92
+ # Determine whether this is a Swift project and, eventually, the list of libraries to copy from
93
+ # Xcode's toolchain directory since there's no "xcodebuild" target to do just that (it is done
94
+ # post-build when exporting an archived build from the "Organizer").
95
+ @ipa_swift_frameworks = Dir["#{@app_path}/Frameworks/libswift*"]
96
+
97
+ if not @ipa_swift_frameworks.empty? then
98
+ Dir.mktmpdir do |tmpdir|
99
+ # Copy all necessary Swift libraries to a temporary "SwiftSupport" directory so that we can
100
+ # easily add it to the .ipa later.
101
+ swift_support = File.join(tmpdir, "SwiftSupport")
102
+
103
+ Dir.mkdir(swift_support)
104
+
105
+ xcode = `xcode-select --print-path`.strip
106
+
107
+ @ipa_swift_frameworks.each do |path|
108
+ framework = File.basename(path)
109
+
110
+ FileUtils.copy_file("#{xcode}/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/#{@sdk}/#{framework}", File.join(swift_support, framework))
111
+ end
112
+
113
+ # Add "SwiftSupport" to the .ipa archive
114
+ Dir.chdir(tmpdir) do
115
+ abort unless system %{zip --recurse-paths "#{@ipa_path}" "SwiftSupport" #{'> /dev/null' unless $verbose}}
116
+ end
117
+ end
118
+ end
119
+
90
120
  log "zip", @dsym_filename
91
121
  abort unless system %{cp -r "#{@dsym_path}" "#{@destination}" && zip -r "#{@dsym_filename}.zip" "#{@dsym_filename}" #{'> /dev/null' unless $verbose} && rm -rf "#{@dsym_filename}"}
92
122
 
93
- say_ok "#{@ipa_path} successfully built"
123
+ say_ok "Successfully built:"
124
+ say_ok @ipa_path
94
125
  end
95
126
 
96
127
  private
@@ -10,7 +10,7 @@ module Shenzhen::Plugins
10
10
 
11
11
  def initialize(api_token, user_name)
12
12
  @api_token, @user_name = api_token, user_name
13
- @connection = Faraday.new(:url => "http://#{HOSTNAME}", :request => { :timeout => 120 }) do |builder|
13
+ @connection = Faraday.new(:url => "https://#{HOSTNAME}", :request => { :timeout => 120 }) do |builder|
14
14
  builder.request :multipart
15
15
  builder.request :json
16
16
  builder.response :json, :content_type => /\bjson$/
@@ -45,6 +45,10 @@ command :'distribute:deploygate' do |c|
45
45
  c.option '-a', '--api_token TOKEN', "API Token. Available at https://deploygate.com/settings"
46
46
  c.option '-u', '--user_name USER_NAME', "User Name. Available at https://deploygate.com/settings"
47
47
  c.option '-m', '--message MESSAGE', "Release message for the build"
48
+ c.option '-d', '--distribution_key DESTRIBUTION_KEY', "distribution key for distribution page"
49
+ c.option '-n', '--disable_notify', "disable notification"
50
+ c.option '-r', '--release_note RELEASE_NOTE', "release note for distribution page"
51
+ c.option '-v', '--visibility (private|public)', "privacy setting ( require public for personal free account)"
48
52
 
49
53
  c.action do |args, options|
50
54
  determine_file! unless @file = options.file
@@ -56,11 +60,20 @@ command :'distribute:deploygate' do |c|
56
60
  determine_deploygate_user_name! unless @user_name = options.user_name || ENV['DEPLOYGATE_USER_NAME']
57
61
  say_error "Missing User Name" and abort unless @api_token
58
62
 
63
+ @message = options.message
64
+ @distribution_key = options.distribution_key || ENV['DEPLOYGATE_DESTRIBUTION_KEY']
65
+ @release_note = options.release_note
66
+ @disable_notify = ! options.disable_notify.nil? ? "yes" : nil
67
+ @visibility = options.visibility
59
68
  @message = options.message
60
69
 
61
70
  parameters = {}
62
71
  parameters[:file] = @file
63
72
  parameters[:message] = @message
73
+ parameters[:distribution_key] = @distribution_key if @distribution_key
74
+ parameters[:release_note] = @release_note if @release_note
75
+ parameters[:disable_notify] = @disable_notify if @disable_notify
76
+ parameters[:visibility] = @visibility if @visibility
64
77
  parameters[:replace] = "true" if options.replace
65
78
 
66
79
  client = Shenzhen::Plugins::DeployGate::Client.new(@api_token, @user_name)
@@ -50,7 +50,7 @@ module Shenzhen::Plugins
50
50
  end
51
51
 
52
52
  options = {
53
- :key => options['type'],
53
+ :key => options['key'],
54
54
  :token => options['token'],
55
55
  :file => Faraday::UploadIO.new(ipa, 'application/octet-stream')
56
56
  }
@@ -75,6 +75,8 @@ command :'distribute:fir' do |c|
75
75
  c.option '-u', '--user_token TOKEN', "User Token. Available at http://fir.im/user/info"
76
76
  c.option '-a', '--app_id APPID', "App Id (iOS Bundle identifier)"
77
77
  c.option '-n', '--notes NOTES', "Release notes for the build"
78
+ c.option '-V', '--app_version VERSION', "App Version"
79
+ c.option '-S', '--short_version SHORT', "App Short Version"
78
80
 
79
81
  c.action do |args, options|
80
82
  determine_file! unless @file = options.file
@@ -89,6 +91,10 @@ command :'distribute:fir' do |c|
89
91
  determine_notes! unless @notes = options.notes
90
92
  say_error "Missing release notes" and abort unless @notes
91
93
 
94
+ determine_app_version! unless @app_version = options.app_version
95
+
96
+ determine_short_version! unless @short_version = options.short_version
97
+
92
98
  client = Shenzhen::Plugins::Fir::Client.new(@user_token)
93
99
  app_response = client.get_app_info(@app_id)
94
100
  if app_response.status == 200
@@ -101,6 +107,8 @@ command :'distribute:fir' do |c|
101
107
 
102
108
  app_response = client.update_app_info(oid, {
103
109
  :changelog => @notes,
110
+ :version => @app_version,
111
+ :versionShort => @short_version
104
112
  })
105
113
 
106
114
  if app_response.status == 200
@@ -51,9 +51,11 @@ command :'distribute:hockeyapp' do |c|
51
51
  c.option '-a', '--token TOKEN', "API Token. Available at https://rink.hockeyapp.net/manage/auth_tokens"
52
52
  c.option '-i', '--identifier PUBLIC_IDENTIFIER', "Public identifier of the app you are targeting, if not specified HockeyApp will use the bundle identifier to choose the right"
53
53
  c.option '-m', '--notes NOTES', "Release notes for the build (Default: Textile)"
54
- c.option '-r', '--release RELEASE', [:alpha, :beta, :live], "Release type: 0 - Beta, 1 - Live, 2 - Alpha (Default: alpha)"
54
+ c.option '-r', '--release RELEASE', [:beta, :store, :alpha, :enterprise], "Release type: 0 - Beta, 1 - Store, 2 - Alpha , 3 - Enterprise"
55
55
  c.option '--markdown', 'Notes are written with Markdown'
56
56
  c.option '--tags TAGS', "Comma separated list of tags which will receive access to the build"
57
+ c.option '--teams TEAMS', "Comma separated list of team ID numbers to which this build will be restricted"
58
+ c.option '--users USERS', "Comma separated list of user ID numbers to which this build will be restricted"
57
59
  c.option '--notify', "Notify permitted teammates to install the build"
58
60
  c.option '--downloadOff', "Upload but don't allow download of this version just yet"
59
61
  c.option '--mandatory', "Make this update mandatory"
@@ -81,15 +83,19 @@ command :'distribute:hockeyapp' do |c|
81
83
  parameters[:notify] = "1" if options.notify && !options.downloadOff
82
84
  parameters[:status] = options.downloadOff ? "1" : "2"
83
85
  parameters[:tags] = options.tags if options.tags
86
+ parameters[:teams] = options.teams if options.teams
87
+ parameters[:users] = options.users if options.users
84
88
  parameters[:dsym_filename] = @dsym if @dsym
85
89
  parameters[:mandatory] = "1" if options.mandatory
86
90
  parameters[:release_type] = case options.release
87
91
  when :beta
88
92
  "0"
89
- when :live
93
+ when :store
90
94
  "1"
91
- else
95
+ when :alpha
92
96
  "2"
97
+ when :enterprise
98
+ "3"
93
99
  end
94
100
  parameters[:commit_sha] = options.commit_sha if options.commit_sha
95
101
  parameters[:build_server_url] = options.build_server_url if options.build_server_url
@@ -17,7 +17,7 @@ module Shenzhen::Plugins
17
17
  @account = account
18
18
  @password = password
19
19
  @params = params
20
- @filename = File.basename(@ipa)
20
+ @filename = File.basename(@ipa).tr(" ", "_")
21
21
  end
22
22
 
23
23
  def upload_build!
@@ -105,7 +105,7 @@ command :'distribute:itunesconnect' do |c|
105
105
  say_error "Missing Apple ID" and abort unless apple_id
106
106
 
107
107
  @password = options.password || ENV['ITUNES_CONNECT_PASSWORD']
108
- if @password ||= Security::GenericPassword.find(:s => Shenzhen::Plugins::ITunesConnect::ITUNES_CONNECT_SERVER, :a => @account)
108
+ if @password.nil? && @password = Security::GenericPassword.find(:s => Shenzhen::Plugins::ITunesConnect::ITUNES_CONNECT_SERVER, :a => @account)
109
109
  @password = @password.password
110
110
  say_ok "Found password in keychain for account: #{@account}" if options.verbose
111
111
  else
@@ -1,3 +1,3 @@
1
1
  module Shenzhen
2
- VERSION = '0.10.3'
2
+ VERSION = '0.11.0'
3
3
  end
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shenzhen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.3
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mattt Thompson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-09 00:00:00.000000000 Z
11
+ date: 2015-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -225,6 +225,7 @@ files:
225
225
  - ./shenzhen-0.10.0.gem
226
226
  - ./shenzhen-0.10.1.gem
227
227
  - ./shenzhen-0.10.2.gem
228
+ - ./shenzhen-0.10.3.gem
228
229
  - ./shenzhen.gemspec
229
230
  - bin/ipa
230
231
  homepage: http://nomad-cli.com