ios_dev_tools 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6583165243e7d6849595618aeb25b5bd5b1256ad
4
+ data.tar.gz: 94e721d32ac5b1d4d3b6d489cbd6c1a9e7aa6d68
5
+ SHA512:
6
+ metadata.gz: 5c5ba1b2f24e34e3312c2fed7acde878a77736390952c4eba3ad806cdee64d1fbe8c7d988220456e805e4ffe7a3fa62bbd29c3c6dfee1019f4e10bdd6e001407
7
+ data.tar.gz: 4bd46e0131e5ee9d1f430e9098c45ebb35292d08998eb5794f1dd1423bc3df05391792a8521a5f889e75041065b2cbac094010d3d54e78d14618b2671f001355
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+
5
+ begin
6
+ require 'ios_dev_tools'
7
+ rescue LoadError
8
+ require 'rubygems'
9
+ require 'ios_dev_tools'
10
+ end
11
+
12
+ tool=IOSDevTools::Tool.new
13
+ tool.process_cmd_line_args ARGV
@@ -1,8 +1,14 @@
1
1
 
2
2
  module IOSDevTools
3
3
 
4
- autoload :ApplicationBundle, 'ios_dev_tools/application_bundle'
5
- autoload :ProvisioningProfile, 'ios_dev_tools/provisioning_profile'
6
4
  autoload :VERSION, 'ios_dev_tools/version'
5
+ autoload :ApplicationBundle, 'ios_dev_tools/model/application_bundle'
6
+ autoload :ProvisioningProfile, 'ios_dev_tools/model/provisioning_profile'
7
+ autoload :InfoPlist, 'ios_dev_tools/model/info_plist'
8
+ autoload :Pack, 'ios_dev_tools/commands/pack'
9
+ autoload :Sign, 'ios_dev_tools/commands/sign'
10
+ autoload :Verify, 'ios_dev_tools/commands/verify'
11
+ autoload :Tool, 'ios_dev_tools/commands/tool'
12
+ autoload :Help, 'ios_dev_tools/commands/help'
7
13
 
8
14
  end
@@ -0,0 +1,131 @@
1
+
2
+ #
3
+ #
4
+ #
5
+ module IOSDevTools
6
+
7
+ require 'optparse'
8
+
9
+ #
10
+ #
11
+ #
12
+ class Help
13
+
14
+ #
15
+ #
16
+ #
17
+ def self.create_with_args cmd_line_arguments
18
+
19
+ options=parse_options cmd_line_arguments
20
+ return Help.new options
21
+
22
+ end
23
+
24
+ #
25
+ #
26
+ #
27
+ def self.parse_options(args)
28
+
29
+ options={}
30
+ options[:help_option]=args[0]
31
+
32
+ return options
33
+ end
34
+
35
+ #
36
+ #
37
+ #
38
+ def initialize options
39
+
40
+ @options=options
41
+
42
+ end
43
+
44
+ #
45
+ #
46
+ #
47
+ def execute
48
+
49
+ Help.display_banner
50
+
51
+ if not @options[:help_option]
52
+ # no option give, display generic help
53
+ display_generic_help
54
+ elsif @options[:help_option]=="commands"
55
+ # list of commands requested
56
+ display_available_commands
57
+ else
58
+ # command specific help requested
59
+ command_name=@options[:help_option]
60
+ if not Tool.valid_command_name? command_name
61
+ display_unknown_command command_name
62
+ else
63
+ display_command_specific_help command_name
64
+ end
65
+ end
66
+ end
67
+
68
+ #
69
+ #
70
+ #
71
+ def display_unknown_command command_name
72
+ puts "
73
+ ERROR: Unknown command: #{command_name}
74
+ "
75
+ display_generic_help
76
+ end
77
+
78
+ #
79
+ #
80
+ #
81
+ def self.display_banner
82
+ puts "iOS Development Tools v.#{VERSION}
83
+
84
+ "
85
+ end
86
+
87
+ #
88
+ #
89
+ #
90
+ def display_available_commands
91
+ puts "
92
+ Available commands:
93
+
94
+ sign - sign application bundle/archive
95
+ verify - verify application bundle/archive
96
+ pack - pack application bundle into archive
97
+
98
+ Execute following command to see command specific help
99
+
100
+ ios_tool help [COMMAND NAME]
101
+ "
102
+
103
+ end
104
+
105
+ #
106
+ #
107
+ #
108
+ def display_generic_help
109
+ puts "
110
+
111
+ TODO: ios_tool help
112
+
113
+
114
+ help commands - displays available commands
115
+ help [COMMAND NAME] - displays command specific help
116
+
117
+
118
+ "
119
+
120
+ end
121
+
122
+ #
123
+ #
124
+ #
125
+ def display_command_specific_help command_name
126
+ command_class=Tool.command_name_to_class command_name
127
+ command_class.display_help
128
+ end
129
+
130
+ end
131
+ end
@@ -0,0 +1,22 @@
1
+
2
+ module IOSDevTools
3
+
4
+ class Pack
5
+
6
+ def self.create_with_args cmd_line_arguments
7
+ Pack.new
8
+ end
9
+
10
+ def self.display_help
11
+
12
+ puts "
13
+ TODO: 'pack' command help
14
+ "
15
+ end
16
+
17
+ def execute
18
+ puts "TODO: execute"
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,139 @@
1
+
2
+ module IOSDevTools
3
+
4
+ require 'optparse'
5
+
6
+ class Sign
7
+
8
+ def self.create_with_args cmd_line_arguments
9
+
10
+ options=parse_options cmd_line_arguments
11
+
12
+ return Sign.new options
13
+ end
14
+
15
+ def initialize options
16
+
17
+ @options=options
18
+ @be_verbose=(options[:verbose]!=nil)
19
+
20
+ end
21
+
22
+ def self.display_help
23
+
24
+ Sign.parse_options ["-h"]
25
+
26
+ end
27
+
28
+ def verbose_msg message
29
+
30
+ puts message if @be_verbose
31
+
32
+ end
33
+
34
+ def error_msg message
35
+
36
+ puts "\nERROR:\t#{message}\n"
37
+
38
+ end
39
+
40
+ def execute
41
+
42
+ verbose_msg "Passed options:\n#{@options.inspect}"
43
+
44
+ begin
45
+ provisioning_profile=IOSDevTools::ProvisioningProfile.new @options[:profile_location]
46
+ application_bundle=IOSDevTools::ApplicationBundle.new @options[:input_file] do |ab|
47
+ ab.temp_folder=options[:temp_folder]
48
+ end
49
+ rescue => error
50
+ error_msg error
51
+ exit 1
52
+ end
53
+
54
+ new_bundle_id = @options[:bundle_id]
55
+ new_bundle_id ||= application_bundle.bundle_id
56
+
57
+ if not provisioning_profile.is_compatible_with_bundle_id new_bundle_id
58
+ error_msg "Provisioning profile identifier [#{provisioning_profile.application_identifier}] is not compatible with bundle identifier [#{new_bundle_id}]\n \
59
+ \tMaybe you should use -b switch to overwrite the bundle identifier?"
60
+ exit 1
61
+ end
62
+
63
+ application_bundle.bundle_id = new_bundle_id
64
+ application_bundle.set_provisioning_profile provisioning_profile.profile_location
65
+ application_bundle.sign_with_identity @options[:identity]
66
+ application_bundle.package_to_ipa @options[:output_ipa]
67
+
68
+ puts "\nApplication archive created and signed: #{options[:output_ipa]}"
69
+
70
+ end
71
+
72
+ def self.parse_options(args)
73
+
74
+ options = Hash.new
75
+ OptionParser.new do |opts|
76
+
77
+ opts.banner = "Usage:
78
+ ios_tool sign -i \"iPhone Distribution: Name\" -p path/to/profile -o output/ipa/file [options] inputIpa"
79
+
80
+ opts.separator ""
81
+ opts.separator "Options:"
82
+
83
+ opts.on("-p", "--profile PATH_TO_PROFILE", "Path to profile") do |profile_location|
84
+ options[:profile_location] = profile_location
85
+ end
86
+
87
+ opts.on("-b", "--bundle-id [BUNDLE_IDENTIFIER]", "Bundle identifier") do |bundle_id|
88
+ options[:bundle_id] = bundle_id
89
+ end
90
+
91
+ opts.on("-o", "--output OUTPUT_IPA_FILE", "Output ipa archive") do |output_ipa|
92
+ options[:output_ipa] = output_ipa
93
+ end
94
+
95
+ opts.on("-i", "--identity IDENTITY", "Identity") do |identity|
96
+ options[:identity] = identity
97
+ end
98
+
99
+ opts.on("-t", "--temp [TEMP_FOLDER]", "Temporary folder location") do |temp_folder|
100
+ options[:temp_folder] = temp_folder
101
+ end
102
+
103
+ opts.separator ""
104
+ opts.separator "Common options:"
105
+
106
+ opts.on("-v", "--verbose", "Run verbosely") do |v|
107
+ options[:verbose] = v
108
+ end
109
+
110
+ opts.on("--version", "Show version and exit") do |v|
111
+ puts "Version: #{IOSDevTools::VERSION}"
112
+ exit
113
+ end
114
+
115
+ # No argument, shows at tail. This will print an options summary.
116
+ # Try it and see!
117
+ opts.on_tail("-h", "--help", "Show this message") do
118
+ puts opts
119
+ exit
120
+ end
121
+
122
+ end.parse!(args)
123
+
124
+ options[:input_file]=ARGV[0]
125
+ mandatory=[options[:profile_location],options[:identity],options[:output_ipa],options[:input_file]]
126
+ expected_number=mandatory.count
127
+ real_number=mandatory.compact.count
128
+ if expected_number != real_number
129
+ # one of mandatory switches is missing
130
+ # display help and exit
131
+ parse_options ["-h"]
132
+ end
133
+
134
+ return options
135
+ end
136
+
137
+ end
138
+
139
+ end
@@ -0,0 +1,122 @@
1
+
2
+ module IOSDevTools
3
+
4
+ require 'optparse'
5
+
6
+ class Tool
7
+
8
+ def process_cmd_line_args cmd_line_arguments
9
+
10
+ command_name=cmd_line_arguments[0]
11
+
12
+ if not command_name or command_name=="-h" or command_name=="--help"
13
+ command_name="help"
14
+ end
15
+
16
+ if not Tool.valid_command_name? command_name
17
+ puts "Unknown command"
18
+ exit
19
+ end
20
+
21
+ # create class definition
22
+ command_class=Tool.command_name_to_class command_name
23
+
24
+ # NOTE:shift argument array to loose first element which is command name
25
+ # the command is already recognised and is not needed any more
26
+ # this simplifies options parsing inside commands
27
+ ARGV.shift
28
+
29
+ # use common factory method to create the command
30
+ command=command_class.create_with_args ARGV
31
+ # execute the command if created
32
+ command.execute if command
33
+
34
+ end
35
+
36
+ def self.valid_command_name? command_name
37
+
38
+ valid_commands=["sign", "pack", "verify", "help"]
39
+ return valid_commands.include? command_name
40
+
41
+ end
42
+
43
+ def self.command_name_to_class command_name
44
+ # convert snake case to camel case
45
+ c=command_name.gsub(/(?<=_|^)(\w)/){$1.upcase}.gsub(/(?:_)(\w)/,'\1')
46
+ # create class definition
47
+ command_class=nil
48
+ begin
49
+ command_class=Object.const_get("IOSDevTools::#{c}")
50
+ rescue NameError,e
51
+ end
52
+ return command_class
53
+ end
54
+
55
+ def self.parse_options(args)
56
+
57
+ options = Hash.new
58
+ OptionParser.new do |opts|
59
+
60
+ opts.banner = "Usage:
61
+ ios_tool sign -i \"iPhone Distribution: Name\" -p path/to/profile -o output/ipa/file [options] inputIpa"
62
+
63
+ opts.separator ""
64
+ opts.separator "Options:"
65
+
66
+ opts.on("-p", "--profile PATH_TO_PROFILE", "Path to profile") do |profile_location|
67
+ options[:profile_location] = profile_location
68
+ end
69
+
70
+ opts.on("-b", "--bundle-id [BUNDLE_IDENTIFIER]", "Bundle identifier") do |bundle_id|
71
+ options[:bundle_id] = bundle_id
72
+ end
73
+
74
+ opts.on("-o", "--output OUTPUT_IPA_FILE", "Output ipa archive") do |output_ipa|
75
+ options[:output_ipa] = output_ipa
76
+ end
77
+
78
+ opts.on("-i", "--identity IDENTITY", "Identity") do |identity|
79
+ options[:identity] = identity
80
+ end
81
+
82
+ opts.on("-t", "--temp [TEMP_FOLDER]", "Temporary folder location") do |temp_folder|
83
+ options[:temp_folder] = temp_folder
84
+ end
85
+
86
+ opts.separator ""
87
+ opts.separator "Common options:"
88
+
89
+ opts.on("-v", "--verbose", "Run verbosely") do |v|
90
+ options[:verbose] = v
91
+ end
92
+
93
+ opts.on("--version", "Show version and exit") do |v|
94
+ puts "Version: #{IOSDevTools::VERSION}"
95
+ exit
96
+ end
97
+
98
+ # No argument, shows at tail. This will print an options summary.
99
+ # Try it and see!
100
+ opts.on_tail("-h", "--help", "Show this message") do
101
+ puts opts
102
+ exit
103
+ end
104
+
105
+ end.parse!(args)
106
+
107
+ options[:input_file]=ARGV[0]
108
+ mandatory=[options[:profile_location],options[:identity],options[:output_ipa],options[:input_file]]
109
+ expected_number=mandatory.count
110
+ real_number=mandatory.compact.count
111
+ if expected_number != real_number
112
+ # one of mandatory switches is missing
113
+ # display help and exit
114
+ parse_options ["-h"]
115
+ end
116
+
117
+ return options
118
+ end
119
+
120
+ end
121
+
122
+ end
@@ -0,0 +1,22 @@
1
+
2
+ module IOSDevTools
3
+
4
+ class Verify
5
+
6
+ def self.create_with_args cmd_line_arguments
7
+ Verify.new
8
+ end
9
+
10
+ def self.display_help
11
+
12
+ puts "
13
+ TODO: 'verify' command help
14
+ "
15
+ end
16
+
17
+ def execute
18
+ puts "TODO: execute"
19
+ end
20
+ end
21
+
22
+ end
@@ -15,6 +15,7 @@ module IOSDevTools
15
15
  attr_accessor :temp_folder
16
16
  attr_accessor :plist_buddy_cmd
17
17
  attr_accessor :application_name
18
+ attr_accessor :info_plist
18
19
 
19
20
  def initialize file_or_folder_location
20
21
 
@@ -30,7 +31,6 @@ module IOSDevTools
30
31
 
31
32
  @src_location=file_or_folder_location
32
33
  @temp_folder||="temp"
33
- @plist_buddy_cmd||="/usr/libexec/PlistBuddy"
34
34
 
35
35
  if not @is_application_folder
36
36
  # wipe out temp folder
@@ -44,26 +44,11 @@ module IOSDevTools
44
44
  end
45
45
 
46
46
  @application_name=Pathname.new(@location).basename
47
+ @info_plist=InfoPlist.new "#{@location}/Info.plist"
47
48
 
48
49
  end
49
50
 
50
- def display_name
51
- `#{@plist_buddy_cmd} -c "Print :CFBundleDisplayName" "#{@location}/Info.plist"`.strip
52
- end
53
-
54
- def display_name= new_name
55
- return if not new_name
56
- `#{@plist_buddy_cmd} -c "Set :CFBundleDisplayName #{new_name}" "#{@location}/Info.plist"`
57
- end
58
51
 
59
- def bundle_id
60
- `#{@plist_buddy_cmd} -c "Print :CFBundleIdentifier" "#{@location}/Info.plist"`.strip
61
- end
62
-
63
- def bundle_id= new_bundle_id
64
- return if not new_bundle_id
65
- `#{@plist_buddy_cmd} -c "Set :CFBundleIdentifier #{new_bundle_id}" "#{@location}/Info.plist"`
66
- end
67
52
 
68
53
  def set_provisioning_profile new_provisioning_profile_location
69
54
  return if not new_provisioning_profile_location
@@ -0,0 +1,50 @@
1
+ module IOSDevTools
2
+
3
+ #
4
+ #
5
+ #
6
+ class InfoPlist
7
+
8
+ attr_accessor :info_plist_file_path
9
+ attr_accessor :plist_buddy_cmd
10
+
11
+ def initialize info_plist_file_path
12
+
13
+ @info_plist_file_path=info_plist_file_path
14
+
15
+ yield self if block_given?
16
+
17
+ @plist_buddy_cmd||="/usr/libexec/PlistBuddy"
18
+
19
+ raise "Property list file \"#{info_plist_file_path}\" doesn't exist" if not File.exists? @info_plist_file_path
20
+ raise "Plist editor \"#{info_plist_file_path}\" doesn't exist" if not File.exists? @plist_buddy_cmd
21
+
22
+ end
23
+
24
+ def set_property property_id, property_value
25
+ return if not property_id or not property_value
26
+ `#{@plist_buddy_cmd} -c "Set :#{property_id} #{new_name}" "#{@info_plist_file_path}"`
27
+ end
28
+
29
+ def get_property property_id
30
+ `#{@plist_buddy_cmd} -c "Print :#{property_id}" "#{@info_plist_file_path}"`.strip
31
+ end
32
+
33
+ def display_name
34
+ get_property "CFBundleDisplayName"
35
+ end
36
+
37
+ def display_name= new_name
38
+ set_property "CFBundleDisplayName", new_name
39
+ end
40
+
41
+ def bundle_id
42
+ get_property "CFBundleIdentifier"
43
+ end
44
+
45
+ def bundle_id= new_bundle_id
46
+ set_property "CFBundleIdentifier", new_bundle_id
47
+ end
48
+
49
+ end
50
+ end
@@ -1,5 +1,5 @@
1
1
  module IOSDevTools
2
2
 
3
- VERSION = "0.1.3"
3
+ VERSION = "0.1.4"
4
4
 
5
5
  end
@@ -3,6 +3,18 @@ require 'ios_dev_tools'
3
3
 
4
4
  class ApplicationBundleTest < Test::Unit::TestCase
5
5
 
6
+ def test_create_with_app_folder
7
+
8
+ app_bundle=IOSDevTools::ApplicationBundle.new "test_resources/DummyApp.app"
9
+
10
+ assert_not_nil app_bundle
11
+ info_plist=app_bundle.info_plist
12
+ assert_not_nil info_plist
13
+ assert_equal "Dummy Bundle", app_bundle.info_plist.display_name
14
+ assert_equal "com.csquirrel.dummy.bundle", app_bundle.info_plist.bundle_id
15
+
16
+ end
17
+
6
18
  def test_create_with_not_existing_folder
7
19
 
8
20
  assert_raise RuntimeError do
@@ -0,0 +1,23 @@
1
+ require 'test/unit'
2
+ require 'ios_dev_tools'
3
+
4
+ class ApplicationBundleTest < Test::Unit::TestCase
5
+
6
+ def test_create_with_file
7
+
8
+ info_plist=IOSDevTools::InfoPlist.new "test_resources/DummyApp.app/Info.plist"
9
+
10
+ assert_equal "Dummy Bundle", info_plist.display_name
11
+ assert_equal "com.csquirrel.dummy.bundle", info_plist.bundle_id
12
+
13
+ end
14
+
15
+ def test_create_with_not_existing_file
16
+
17
+ assert_raise RuntimeError do
18
+ IOSDevTools::ApplicationBundle.new "dummy.file.plist"
19
+ end
20
+
21
+ end
22
+
23
+ end
metadata CHANGED
@@ -1,66 +1,61 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ios_dev_tools
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 3
9
- version: 0.1.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.4
10
5
  platform: ruby
11
- authors:
6
+ authors:
12
7
  - Marcin Maciukiewicz
13
8
  autorequire:
14
9
  bindir: bin
15
10
  cert_chain: []
16
-
17
- date: 2013-12-28 00:00:00 +00:00
18
- default_executable:
11
+ date: 2013-12-28 00:00:00.000000000 Z
19
12
  dependencies: []
20
-
21
13
  description: Set of ruby wrappers around iOS dev tasks
22
14
  email: mm@csquirrel.com
23
- executables:
24
- - ios_sign
15
+ executables:
16
+ - ios_tool
25
17
  extensions: []
26
-
27
18
  extra_rdoc_files: []
28
-
29
- files:
19
+ files:
30
20
  - lib/ios_dev_tools.rb
31
- - lib/ios_dev_tools/application_bundle.rb
32
- - lib/ios_dev_tools/provisioning_profile.rb
21
+ - lib/ios_dev_tools/commands/help.rb
22
+ - lib/ios_dev_tools/commands/pack.rb
23
+ - lib/ios_dev_tools/commands/sign.rb
24
+ - lib/ios_dev_tools/commands/tool.rb
25
+ - lib/ios_dev_tools/commands/verify.rb
26
+ - lib/ios_dev_tools/model/application_bundle.rb
27
+ - lib/ios_dev_tools/model/info_plist.rb
28
+ - lib/ios_dev_tools/model/provisioning_profile.rb
33
29
  - lib/ios_dev_tools/version.rb
34
- has_rdoc: true
30
+ - test/test_application_bundle.rb
31
+ - test/test_info_plist.rb
32
+ - test/test_provisioning_profile.rb
33
+ - bin/ios_tool
35
34
  homepage: https://github.com/cSquirrel/ios-dev-tools
36
- licenses:
35
+ licenses:
37
36
  - MIT
37
+ metadata: {}
38
38
  post_install_message:
39
39
  rdoc_options: []
40
-
41
- require_paths:
40
+ require_paths:
42
41
  - lib
43
- required_ruby_version: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- segments:
48
- - 0
49
- version: "0"
50
- required_rubygems_version: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- segments:
55
- - 0
56
- version: "0"
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
57
52
  requirements: []
58
-
59
53
  rubyforge_project: nowarning
60
- rubygems_version: 1.3.6
54
+ rubygems_version: 2.0.3
61
55
  signing_key:
62
- specification_version: 3
56
+ specification_version: 4
63
57
  summary: iOS Dev Tools
64
- test_files:
58
+ test_files:
65
59
  - test/test_application_bundle.rb
60
+ - test/test_info_plist.rb
66
61
  - test/test_provisioning_profile.rb
@@ -1,126 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'optparse'
4
-
5
- begin
6
- require 'ios_dev_tools'
7
- rescue LoadError
8
- require 'rubygems'
9
- require 'ios_dev_tools'
10
- end
11
-
12
- $be_verbose=false
13
-
14
- def verbose_msg message
15
-
16
- puts message if $be_verbose
17
-
18
- end
19
-
20
- def error_msg message
21
-
22
- puts "\nERROR:\t#{message}\n"
23
-
24
- end
25
-
26
- def parse_options(args)
27
-
28
- options = Hash.new
29
- OptionParser.new do |opts|
30
-
31
- opts.banner = "Usage: ios_sign -i \"iPhone Distribution: Name\" -p path/to/profile -o output/ipa/file [options] inputIpa"
32
-
33
- opts.separator ""
34
- opts.separator "Options:"
35
-
36
- opts.on("-p", "--profile PATH_TO_PROFILE", "Path to profile") do |profile_location|
37
- options[:profile_location] = profile_location
38
- end
39
-
40
- opts.on("-b", "--bundle-id [BUNDLE_IDENTIFIER]", "Bundle identifier") do |bundle_id|
41
- options[:bundle_id] = bundle_id
42
- end
43
-
44
- opts.on("-o", "--output OUTPUT_IPA_FILE", "Output ipa archive") do |output_ipa|
45
- options[:output_ipa] = output_ipa
46
- end
47
-
48
- opts.on("-i", "--identity IDENTITY", "Identity") do |identity|
49
- options[:identity] = identity
50
- end
51
-
52
- opts.on("-t", "--temp [TEMP_FOLDER]", "Temporary folder location") do |temp_folder|
53
- options[:temp_folder] = temp_folder
54
- end
55
-
56
- opts.separator ""
57
- opts.separator "Common options:"
58
-
59
- opts.on("-v", "--verbose", "Run verbosely") do |v|
60
- options[:verbose] = v
61
- end
62
-
63
- opts.on("--version", "Show version and exit") do |v|
64
- puts "Version: #{IOSDevTools::VERSION}"
65
- exit
66
- end
67
-
68
- # No argument, shows at tail. This will print an options summary.
69
- # Try it and see!
70
- opts.on_tail("-h", "--help", "Show this message") do
71
- puts opts
72
- exit
73
- end
74
-
75
- end.parse!(args)
76
-
77
- options[:input_file]=ARGV[0]
78
- mandatory=[options[:profile_location],options[:identity],options[:output_ipa],options[:input_file]]
79
- expected_number=mandatory.count
80
- real_number=mandatory.compact.count
81
- if expected_number != real_number
82
- # one of mandatory switches is missing
83
- # display help and exit
84
- parse_options ["-h"]
85
- end
86
-
87
- $be_verbose=(options[:verbose]!=nil)
88
-
89
- return options
90
- end
91
-
92
- def main
93
-
94
- options=parse_options ARGV
95
-
96
- verbose_msg "Passed options:\n#{options.inspect}"
97
-
98
- begin
99
- provisioning_profile=IOSDevTools::ProvisioningProfile.new options[:profile_location]
100
- application_bundle=IOSDevTools::ApplicationBundle.new options[:input_file] do |ab|
101
- ab.temp_folder=options[:temp_folder]
102
- end
103
- rescue => error
104
- error_msg error
105
- exit 1
106
- end
107
-
108
- new_bundle_id = options[:bundle_id]
109
- new_bundle_id ||= application_bundle.bundle_id
110
-
111
- if not provisioning_profile.is_compatible_with_bundle_id new_bundle_id
112
- error_msg "Provisioning profile identifier [#{provisioning_profile.application_identifier}] is not compatible with bundle identifier [#{new_bundle_id}]\n \
113
- \tMaybe you should use -b switch to overwrite the bundle identifier?"
114
- exit 1
115
- end
116
-
117
- application_bundle.bundle_id = new_bundle_id
118
- application_bundle.set_provisioning_profile provisioning_profile.profile_location
119
- application_bundle.sign_with_identity options[:identity]
120
- application_bundle.package_to_ipa options[:output_ipa]
121
-
122
- puts "\nApplication archive created and signed: #{options[:output_ipa]}"
123
-
124
- end
125
-
126
- main