cocoapods-submit 0.1.1 → 0.2.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: bfd703856d72be6f6cb95327b52fd4ec3ba8344b
4
- data.tar.gz: 25cadb740f8bf202a432c1e6cc7a1091f6c565bf
3
+ metadata.gz: 7c96979d4855a45ae0032587c5733fa5d3460a48
4
+ data.tar.gz: a83e7da4d915e1b8a88da2b6720a92c8ec93ec07
5
5
  SHA512:
6
- metadata.gz: e62c29fc2265cbf8548141153ec42847635b632e1b8604e1f6cca4d6bc067453ebf03a8e920e0ece8c65e70a75682ab7f8a5d29bd147eeb869c5579154d4dc89
7
- data.tar.gz: 75f2f6ee3762c3e3c544cf4e213f731300b0bc91caebf52ce3aa40c5bf4e8fcaf88e629f3a516bfc57c9b8ca3ff2b9515fd4d4b242ef1bb0ce34484c9ce51ce6
6
+ metadata.gz: 5a70e9f04478679bbaf950a1dbafd52ba98e2ccaf40a71d52b2716ceacd07d72e7db439adf5ab38df31c041265184e9b127357a243774d493a70328e9bbde5d8
7
+ data.tar.gz: c5237cc46abfdb92b84770666638c09bf58c0a9bd59796bbcf24a603321ee6bb9f79d1589700381956850937815ce6d62a300fad7d4835c93aeca53a03474a1d
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'version'
4
+ require 'cocoapods_submit/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "cocoapods-submit"
@@ -18,8 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "shenzhen", "~> 0.8"
22
- spec.add_dependency "xcpretty", "~> 0.1"
21
+ # spec.add_dependency "xcpretty", "~> 0.1"
23
22
  spec.add_dependency "plist", "~> 3.1"
24
23
 
25
24
  spec.add_development_dependency "bundler", "~> 1.7"
@@ -0,0 +1,5 @@
1
+ require 'cocoapods_submit/provisioning_profile'
2
+ require 'cocoapods_submit/build_configuration'
3
+ require 'cocoapods_submit/version'
4
+ require 'cocoapods_submit/ipa_builder'
5
+ require 'cocoapods_submit/ipa_uploader'
@@ -0,0 +1,23 @@
1
+ require 'plist'
2
+
3
+ module CocoapodsSubmit
4
+ class BuildConfiguration
5
+ def initialize(workspace_path, target, configuration)
6
+ output = `xcodebuild -showBuildSettings -workspace "#{workspace_path}" -scheme "#{target.name}" -configuration "#{configuration.name}"`
7
+ abort unless $?
8
+
9
+ @hash = {}
10
+ regex = /(\w*) *= *(.*)/
11
+ lines = output.split("\n").select { |s| s.match(regex) }
12
+ lines = lines.map { |s| s.match(regex) }.each { |match| @hash[match[1]] = match[2] }
13
+ end
14
+
15
+ def to_s
16
+ super + ": #{@hash.to_s}"
17
+ end
18
+
19
+ def [](settings)
20
+ @hash[settings]
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,129 @@
1
+ require 'plist'
2
+ require 'securerandom'
3
+ require 'fileutils'
4
+
5
+ module CocoapodsSubmit
6
+ class IPABuilder
7
+ attr_reader :workspace_path
8
+ attr_reader :target
9
+ attr_reader :configuration
10
+ attr_reader :build_settings
11
+ attr_reader :provisioning
12
+
13
+ def initialize(workspace_path, target, configuration)
14
+ @directory = File.join "/tmp", SecureRandom.uuid
15
+ @workspace_path = workspace_path
16
+ @target = target
17
+ @configuration = configuration
18
+ @build_settings = BuildConfiguration.new workspace_path, @target, configuration
19
+ end
20
+
21
+ def bundle_identifier
22
+ relative_info_path = configuration.build_settings["INFOPLIST_FILE"]
23
+ info_path = File.join File.dirname(@target.project.path), relative_info_path
24
+ Plist::parse_xml(info_path)["CFBundleIdentifier"]
25
+ end
26
+
27
+ def build_ipa
28
+ FileUtils.mkdir_p @directory
29
+
30
+ increment_bundle_version
31
+ xcodebuild
32
+ copy_app
33
+ # codesign
34
+ ipa_path = package_ipa
35
+
36
+ final_ipa_path = File.join ".", File.basename(ipa_path)
37
+ FileUtils.move ipa_path, final_ipa_path
38
+
39
+ FileUtils.rm_rf @directory
40
+ final_ipa_path
41
+ end
42
+
43
+ private
44
+ def increment_bundle_version
45
+ relative_info_path = configuration.build_settings["INFOPLIST_FILE"]
46
+ info_path = File.join File.dirname(@target.project.path), relative_info_path
47
+ info_plist = Plist::parse_xml(info_path)
48
+ info_plist["CFBundleVersion"] = (info_plist["CFBundleVersion"].to_i + 1).to_s
49
+ File.write info_path, info_plist.to_plist
50
+ end
51
+
52
+ private
53
+ def xcodebuild
54
+ flags = []
55
+ flags << %{-sdk iphoneos}
56
+ flags << %{-workspace "#{workspace_path}"}
57
+ flags << %{-scheme "#{target.name}"}
58
+ flags << %{-configuration "#{configuration.name}"}
59
+
60
+ actions = []
61
+ actions << :clean
62
+ actions << :build
63
+ actions << :archive
64
+
65
+ execute %{xcodebuild #{flags.join(" ")} #{actions.join(" ")} | xcpretty -c && exit ${PIPESTATUS[0]}}
66
+ end
67
+
68
+ private
69
+ def execute(command)
70
+ puts "#{"==>".magenta} #{command}"
71
+ abort unless system(command)
72
+ end
73
+
74
+ private
75
+ def root_directory
76
+ root_directory = File.join @directory, "root"
77
+ FileUtils.mkdir_p root_directory
78
+ root_directory
79
+ end
80
+
81
+ private
82
+ def copy_app
83
+ app_path = File.join build_settings['BUILT_PRODUCTS_DIR'], build_settings['WRAPPER_NAME']
84
+ dsym_path = app_path + ".dSYM"
85
+
86
+ FileUtils.cp_r app_path, root_directory
87
+ FileUtils.cp_r dsym_path, root_directory
88
+ end
89
+
90
+ private
91
+ def codesign
92
+ provisioning = CocoapodsSubmit::ProvisioningProfile.new configuration.build_settings["PROVISIONING_PROFILE"]
93
+ abort "cocoapods-submit only supports provisionings with a single signer identity" unless provisioning.signer_identities.count == 1
94
+ signer_identity = provisioning.signer_identities.first
95
+
96
+ empty_entitlements = entitlements
97
+ app_entitlements = entitlements provisioning["Entitlements"]
98
+
99
+ app_path = File.join root_directory, build_settings['WRAPPER_NAME']
100
+ frameworks_path = File.join app_path, "Frameworks"
101
+
102
+ execute %{codesign --force --verbose --preserve-metadata=identifier,resource-rules --entitlements "#{empty_entitlements}" --sign "#{signer_identity}" #{frameworks_path}/*} if File.exists? frameworks_path
103
+ execute %{codesign --force --verbose --preserve-metadata=identifier,resource-rules --entitlements "#{app_entitlements}" --sign "#{signer_identity}" #{app_path}}
104
+ end
105
+
106
+ private
107
+ def entitlements(entitlements = {})
108
+ entitlements.each do |key, value|
109
+ next unless value.kind_of? Array
110
+ value.delete "Development"
111
+ end
112
+
113
+ path = File.join @directory, "#{SecureRandom.uuid}.entitlements"
114
+ File.write path, entitlements.to_plist
115
+ path
116
+ end
117
+
118
+ private
119
+ def package_ipa
120
+ app_path = File.join root_directory, build_settings['WRAPPER_NAME']
121
+ dsym_path = app_path + ".dSYM"
122
+ ipa_path = File.join @directory, "#{@target.name}.ipa"
123
+
124
+ execute %{xcrun -sdk iphoneos PackageApplication -v "#{app_path}" -o "#{ipa_path}" --embed "#{dsym_path}" > /dev/null}
125
+
126
+ ipa_path
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,106 @@
1
+ require 'plist'
2
+ require 'securerandom'
3
+ require 'fileutils'
4
+
5
+ module CocoapodsSubmit
6
+ class IPAUploader
7
+ attr_reader :ipa
8
+ attr_reader :bundle_identifier
9
+
10
+ def initialize(ipa, bundle_identifier)
11
+ @directory = File.join "/tmp", SecureRandom.uuid
12
+ @ipa = ipa
13
+ @bundle_identifier = bundle_identifier
14
+ end
15
+
16
+ def upload
17
+ FileUtils::mkdir_p @directory
18
+
19
+ username, password, apple_id = credentials(bundle_identifier)
20
+
21
+ transporter = File.join `xcode-select --print-path`.chomp, "/../Applications/Application\\ Loader.app/Contents/MacOS/itms/bin/iTMSTransporter"
22
+
23
+ package = create_package(apple_id)
24
+ execute %{#{transporter} -m verify -f "#{package}" -u "#{username}" -p "#{password}"}
25
+ execute %{#{transporter} -m upload -f "#{package}" -u "#{username}" -p "#{password}"}
26
+
27
+ `rm -rf "#{@directory}"`
28
+ end
29
+
30
+ private
31
+ def create_package(apple_id)
32
+ size = File.size(ipa)
33
+ checksum = Digest::MD5.file(ipa)
34
+
35
+ package = File.join @directory, "Package.itmsp"
36
+ FileUtils.mkdir_p(package)
37
+
38
+ ipa_path = File.join(package, File.basename(ipa))
39
+ metadata_path = File.join(package, "metadata.xml")
40
+
41
+ FileUtils.copy_entry(ipa, ipa_path)
42
+ File.write(metadata_path, metadata(apple_id, checksum, size))
43
+
44
+ package
45
+ end
46
+
47
+ private
48
+ def execute(command)
49
+ puts "#{"==>".magenta} #{command}"
50
+ abort unless system(command)
51
+ end
52
+
53
+ private
54
+ def login(bundle_identifier)
55
+ puts "You will now have to login to iTunes Connect. Don't worry. Your credentials will be securly stored in your keychain."
56
+ print "Username: "
57
+ username = $stdin.gets.chomp
58
+ abort "Username is required" if username.empty?
59
+
60
+ print "Password for #{username}: "
61
+ password = STDIN.noecho(&:gets).chomp
62
+ abort "Password is required" if password.empty?
63
+ puts ""
64
+
65
+ print "Apple-ID for #{bundle_identifier} (you can find it in iTunes Connect): "
66
+ apple_id = $stdin.gets.chomp
67
+ abort "Apple-ID is required" if apple_id.empty?
68
+
69
+ `security add-generic-password -a #{bundle_identifier}.cocoapods-submit.username -s #{bundle_identifier}.cocoapods-submit.username -w #{username}`
70
+ `security add-generic-password -a #{bundle_identifier}.cocoapods-submit.password -s #{bundle_identifier}.cocoapods-submit.password -w #{password}`
71
+ `security add-generic-password -a #{bundle_identifier}.cocoapods-submit.apple-id -s #{bundle_identifier}.cocoapods-submit.apple-id -w #{apple_id}`
72
+
73
+ return [username, password, apple_id]
74
+ end
75
+
76
+ private
77
+ def credentials(bundle_identifier)
78
+ username = `security find-generic-password -wl #{bundle_identifier}.cocoapods-submit.username`.chomp
79
+ return login(bundle_identifier) if $?.to_i > 0
80
+
81
+ password = `security find-generic-password -wl #{bundle_identifier}.cocoapods-submit.password`.chomp
82
+ return login(bundle_identifier) if $?.to_i > 0
83
+
84
+ apple_id = `security find-generic-password -wl #{bundle_identifier}.cocoapods-submit.apple-id`.chomp
85
+ return login(bundle_identifier) if $?.to_i > 0
86
+
87
+ return [username, password, apple_id]
88
+ end
89
+
90
+ private
91
+ def metadata(apple_id, checksum, size)
92
+ %Q(<?xml version="1.0" encoding="UTF-8"?>
93
+ <package version="software4.7" xmlns="http://apple.com/itunes/importer">
94
+ <software_assets apple_id="#{apple_id}">
95
+ <asset type="bundle">
96
+ <data_file>
97
+ <file_name>#{File.basename ipa}</file_name>
98
+ <checksum type="md5">#{checksum}</checksum>
99
+ <size>#{size}</size>
100
+ </data_file>
101
+ </asset>
102
+ </software_assets>
103
+ </package>)
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,52 @@
1
+ require 'plist'
2
+ require 'openssl'
3
+
4
+ module CocoapodsSubmit
5
+ class ProvisioningProfile
6
+ attr_reader :path
7
+ attr_reader :uuid
8
+
9
+ def initialize(uuid)
10
+ @uuid = uuid
11
+ @path = File.expand_path File.join "~/Library/MobileDevice/Provisioning Profiles", "#{uuid}.mobileprovision"
12
+ abort "#{@path} not found" unless File.exists? @path
13
+
14
+ start_string = "<?"
15
+ end_string = "</plist>"
16
+
17
+ profile = File.read(@path)
18
+ profile = profile.slice(profile.index(start_string), profile.length)
19
+ profile = profile.slice(0, profile.index(end_string) + end_string.length)
20
+
21
+ @hash = Plist::parse_xml(profile)
22
+ @hash["DeveloperCertificates"] = @hash["DeveloperCertificates"].map { |s| OpenSSL::X509::Certificate.new s.string }
23
+ end
24
+
25
+ def signer_identities
26
+ @hash["DeveloperCertificates"].map do |cert|
27
+ array = cert.subject.to_a.flatten
28
+ hash = Hash[array.map.with_index.to_a]
29
+
30
+ array[hash["CN"] + 1]
31
+ end
32
+ end
33
+
34
+ def[](string)
35
+ @hash[string]
36
+ end
37
+
38
+ def rank
39
+ return 0.0 unless @hash
40
+
41
+ rank = 1.0
42
+ rank *= 0.0 if @hash["Entitlements"]["get-task-allow"]
43
+ rank *= 1.0 / @hash["ProvisionedDevices"].count if @hash["ProvisionedDevices"]
44
+
45
+ return rank
46
+ end
47
+
48
+ def to_s
49
+ super + ": #{@hash.to_s}"
50
+ end
51
+ end
52
+ end
@@ -1,3 +1,3 @@
1
1
  module CocoapodsSubmit
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require 'plist'
2
2
  require 'io/console'
3
- require 'provisioning_profile'
4
3
  require 'time'
4
+ require 'cocoapods_submit'
5
5
 
6
6
  module Pod
7
7
  class Command
@@ -22,60 +22,23 @@ module Pod
22
22
  super
23
23
  end
24
24
 
25
- def login(bundle_identifier)
26
- puts "You will now have to login to iTunes Connect. Don't worry. Your credentials will be securly stored in your keychain."
27
- print "Username: "
28
- username = $stdin.gets.chomp
29
- abort "Username is required" if username.empty?
30
-
31
- print "Password for #{username}: "
32
- password = STDIN.noecho(&:gets).chomp
33
- abort "Password is required" if password.empty?
34
- puts ""
35
-
36
- print "Apple-ID for #{bundle_identifier} (you can find it in iTunes Connect): "
37
- apple_id = $stdin.gets.chomp
38
- abort "Apple-ID is required" if apple_id.empty?
39
-
40
- `security add-generic-password -a #{bundle_identifier}.cocoapods-submit.username -s #{bundle_identifier}.cocoapods-submit.username -w #{username}`
41
- `security add-generic-password -a #{bundle_identifier}.cocoapods-submit.password -s #{bundle_identifier}.cocoapods-submit.password -w #{password}`
42
- `security add-generic-password -a #{bundle_identifier}.cocoapods-submit.apple-id -s #{bundle_identifier}.cocoapods-submit.apple-id -w #{apple_id}`
43
-
44
- return [username, password, apple_id]
45
- end
46
-
47
- def credentials(bundle_identifier)
48
- username = `security find-generic-password -wl #{bundle_identifier}.cocoapods-submit.username`.chomp
49
- return login(bundle_identifier) if $?.to_i > 0
50
-
51
- password = `security find-generic-password -wl #{bundle_identifier}.cocoapods-submit.password`.chomp
52
- return login(bundle_identifier) if $?.to_i > 0
53
-
54
- apple_id = `security find-generic-password -wl #{bundle_identifier}.cocoapods-submit.apple-id`.chomp
55
- return login(bundle_identifier) if $?.to_i > 0
56
-
57
- return [username, password, apple_id]
58
- end
59
-
60
- def create_package(target, apple_id)
61
- ipa = "#{target}.ipa"
62
- size = File.size(ipa)
63
- checksum = Digest::MD5.file(ipa)
64
-
65
- FileUtils.mkdir_p("Package.itmsp")
66
- FileUtils.copy_entry(ipa, "Package.itmsp/#{ipa}")
67
-
68
- File.write("Package.itmsp/metadata.xml", metadata(apple_id, checksum, size))
69
- end
70
-
71
25
  def find_best_configuration(target)
72
26
  identifiers = target.build_configurations.map { |c| c.build_settings["PROVISIONING_PROFILE"] }
73
- profiles = identifiers.map { |uuid| CocoapodsSubmit::ProvisioningProfile.from_uuid uuid }
74
- ranks = profiles.map &:rank
27
+ profiles = identifiers.map { |uuid| CocoapodsSubmit::ProvisioningProfile.new uuid }
28
+ abort "No build configuration for iTunes Connect releases found." if profiles.count == 0
75
29
 
30
+ ranks = profiles.map &:rank
76
31
  return target.build_configurations[ranks.each_with_index.max[1]]
77
32
  end
78
33
 
34
+ def tag_release
35
+ time = Time.now.strftime "%Y%m%d%H%m%S"
36
+ execute "git add ."
37
+ execute "git commit -am 'Submitted to iTunes Connect submit-#{time}-#{@target.name}-#{info_plist["CFBundleShortVersionString"]}-#{info_plist["CFBundleVersion"]}'"
38
+ execute "git tag submit-#{time}-#{@target.name}-#{info_plist["CFBundleShortVersionString"]}-#{info_plist["CFBundleVersion"]}"
39
+ execute "git push && git push --tags"
40
+ end
41
+
79
42
  def run
80
43
  workspaces = Dir.entries(".").select { |s| s.end_with? ".xcworkspace" }
81
44
  abort "pod submit only supports one .xcworkspace in the current directory" unless workspaces.count == 1
@@ -106,46 +69,13 @@ module Pod
106
69
  configuration = find_best_configuration @target
107
70
  abort "No build configuration found for target #{@target}." unless configuration
108
71
 
109
- # grap info.plist and extract bundle identifier
110
- relative_info_path = @target.build_configuration_list["Release"].build_settings["INFOPLIST_FILE"]
111
- info_path = File.join File.dirname(project.path), relative_info_path
112
- info_plist = Plist::parse_xml(info_path)
113
- identifier = info_plist["CFBundleIdentifier"]
114
- info_plist["CFBundleVersion"] = (info_plist["CFBundleVersion"].to_i + 1).to_s
115
- File.write info_path, info_plist.to_plist
116
-
117
- username, password, apple_id = credentials(identifier)
118
-
119
- execute "ipa build --verbose --scheme #{@target_name} --configuration #{configuration.name} | xcpretty -c && exit ${PIPESTATUS[0]}"
120
- execute "ipa info #{@target_name}.ipa"
72
+ ipa_builder = CocoapodsSubmit::IPABuilder.new workspaces[0], targets.first, configuration
73
+ path = ipa_builder.build_ipa
121
74
 
122
- transporter = File.join `xcode-select --print-path`.chomp, "/../Applications/Application\\ Loader.app/Contents/MacOS/itms/bin/iTMSTransporter"
123
-
124
- create_package(@target_name, apple_id)
125
- execute "#{transporter} -m verify -f Package.itmsp -u #{username} -p #{password}"
126
- execute "#{transporter} -m upload -f Package.itmsp -u #{username} -p #{password}"
127
- `rm -rf Package.itmsp #{@target_name}.ipa #{@target_name}.app.dSYM.zip`
128
-
129
- time = Time.now.strftime "%Y%m%d%H%m%S"
130
- execute "git add ."
131
- execute "git commit -am 'Submitted to iTunes Connect submit-#{time}-#{@target.name}-#{info_plist["CFBundleShortVersionString"]}-#{info_plist["CFBundleVersion"]}'"
132
- execute "git tag submit-#{time}-#{@target.name}-#{info_plist["CFBundleShortVersionString"]}-#{info_plist["CFBundleVersion"]}"
133
- execute "git push && git push --tags"
134
- end
75
+ uploader = CocoapodsSubmit::IPAUploader.new path, ipa_builder.bundle_identifier
76
+ uploader.upload
135
77
 
136
- def metadata(apple_id, checksum, size)
137
- %Q(<?xml version="1.0" encoding="UTF-8"?>
138
- <package version="software4.7" xmlns="http://apple.com/itunes/importer">
139
- <software_assets apple_id="#{apple_id}">
140
- <asset type="bundle">
141
- <data_file>
142
- <file_name>#{@target_name}.ipa</file_name>
143
- <checksum type="md5">#{checksum}</checksum>
144
- <size>#{size}</size>
145
- </data_file>
146
- </asset>
147
- </software_assets>
148
- </package>)
78
+ tag_release
149
79
  end
150
80
  end
151
81
  end
data/ps.rb ADDED
@@ -0,0 +1,74 @@
1
+ handled_processes = []
2
+
3
+ while true
4
+ processes = `ps ax`.split "\n"
5
+ index = processes.shift.index /COMMAND/
6
+
7
+ processes.map { |s| s[index..-1] }.each do |command|
8
+ command = command.strip
9
+ next if handled_processes.include? command
10
+
11
+ handled_processes << command
12
+ puts command
13
+ end
14
+ sleep 0.001
15
+ end
16
+
17
+ =begin
18
+ /Applications/Atom.app/Contents/Frameworks/Atom Helper.app/Contents/MacOS/Atom Helper --eval require('/Applications/Atom.app/Contents/Resources/app/node_modules/coffee-script/lib/coffee-script/coffee-script.js').register();^Jrequire('/Applications/Atom.app/Contents/Resources/app/src/coffee-cache.js').register();^Jrequire('/Applications/Atom.app/Contents/Resources/app/src/task-bootstrap.js');
19
+ (Atom Helper)
20
+ (lssave)
21
+ /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker-bundle -c MDSImporterBundleFinder -m com.apple.mdworker.bundles
22
+ /usr/bin/ditto -V /Users/oliver/Library/Developer/Xcode/Archives/2014-11-10/SellSpotCompanion 10.11.14 10.16.xcarchive/Products/Applications/SellSpotCompanion.app /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root/Payload/SellSpotCompanion.app
23
+ (ditto)
24
+ /usr/bin/codesign -vvv --force --sign 41796A964CE9D664FB012A8A47ADDA2C22DED204 --preserve-metadata=identifier,resource-rules --entitlements /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/entitlementsYm3 /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root/Payload/SellSpotCompanion.app/Frameworks/SellSpotSDK.framework
25
+ codesign_allocate -i /private/var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root/Payload/SellSpotCompanion.app/Frameworks/SellSpotSDK.framework/SellSpotSDK -o /private/var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root/Payload/SellSpotCompanion.app/Frameworks/SellSpotSDK.framework/SellSpotSDK.cstemp -a armv7 24848 -a arm64 28448
26
+ (codesign)
27
+ /usr/bin/codesign -vvv --force --sign 41796A964CE9D664FB012A8A47ADDA2C22DED204 --preserve-metadata=identifier,resource-rules --entitlements /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/entitlementsD0l /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root/Payload/SellSpotCompanion.app/Frameworks/libswiftCore.dylib
28
+ (codesign_allocat)
29
+ /usr/bin/codesign -vvv --force --sign 41796A964CE9D664FB012A8A47ADDA2C22DED204 --preserve-metadata=identifier,resource-rules --entitlements /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/entitlementscGY /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root/Payload/SellSpotCompanion.app/Frameworks/libswiftCoreGraphics.dylib
30
+ /usr/bin/codesign -vvv --force --sign 41796A964CE9D664FB012A8A47ADDA2C22DED204 --preserve-metadata=identifier,resource-rules --entitlements /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/entitlementssEK /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root/Payload/SellSpotCompanion.app/Frameworks/libswiftCoreImage.dylib
31
+ /usr/bin/codesign -vvv --force --sign 41796A964CE9D664FB012A8A47ADDA2C22DED204 --preserve-metadata=identifier,resource-rules --entitlements /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/entitlementsrR2 /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root/Payload/SellSpotCompanion.app/Frameworks/libswiftDarwin.dylib
32
+ /usr/bin/codesign -vvv --force --sign 41796A964CE9D664FB012A8A47ADDA2C22DED204 --preserve-metadata=identifier,resource-rules --entitlements /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/entitlementsUAE /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root/Payload/SellSpotCompanion.app/Frameworks/libswiftDispatch.dylib
33
+ /usr/bin/codesign -vvv --force --sign 41796A964CE9D664FB012A8A47ADDA2C22DED204 --preserve-metadata=identifier,resource-rules --entitlements /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/entitlementscaW /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root/Payload/SellSpotCompanion.app/Frameworks/libswiftFoundation.dylib
34
+ /usr/bin/codesign -vvv --force --sign 41796A964CE9D664FB012A8A47ADDA2C22DED204 --preserve-metadata=identifier,resource-rules --entitlements /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/entitlementsBYW /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root/Payload/SellSpotCompanion.app/Frameworks/libswiftObjectiveC.dylib
35
+ /usr/bin/codesign -vvv --force --sign 41796A964CE9D664FB012A8A47ADDA2C22DED204 --preserve-metadata=identifier,resource-rules --entitlements /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/entitlementswOn /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root/Payload/SellSpotCompanion.app/Frameworks/libswiftSecurity.dylib
36
+ /usr/bin/codesign -vvv --force --sign 41796A964CE9D664FB012A8A47ADDA2C22DED204 --preserve-metadata=identifier,resource-rules --entitlements /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/entitlementsj8N /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root/Payload/SellSpotCompanion.app/Frameworks/libswiftUIKit.dylib
37
+ /usr/bin/codesign -vvv --force --sign 41796A964CE9D664FB012A8A47ADDA2C22DED204 --preserve-metadata=identifier,resource-rules --entitlements /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/entitlementsVRN /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root/Payload/SellSpotCompanion.app
38
+ (rsync)
39
+ /Applications/Xcode.app/Contents/Developer/usr/bin/symbols -noTextInSOD -noDaemon -arch all -symbolsPackageDir /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Symbols /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/SellSpotSDK.framework/SellSpotSDK
40
+ (symbols)
41
+ /Applications/Xcode.app/Contents/Developer/usr/bin/symbols -noTextInSOD -noDaemon -arch all -symbolsPackageDir /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Symbols /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/SellSpotCompanion.app/SellSpotCompanion
42
+ /usr/bin/ditto -V -c -k --norsrc /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/Root /var/folders/nr/th1dm1g94d79dn7w2d1r3nxw0000gn/T/XCodeDistPipeline.bUI/SellSpotCompanion.ipa
43
+ /System/Library/PrivateFrameworks/FamilyControls.framework/Resources/parentalcontrolsd
44
+ automountd
45
+ (mdworker)
46
+ (parentalcontrols)
47
+ (zsh)
48
+ (git)
49
+ (tail)
50
+ (cat)
51
+ (mdwrite)
52
+ (SFLSharedPrefsTo)
53
+ /System/Library/PrivateFrameworks/SyncedDefaults.framework/Support/syncdefaultsd
54
+ (garcon)
55
+ pluginkit -a /Applications/Dropbox.app/Contents/PlugIns/garcon.appex
56
+ (pluginkit)
57
+ pluginkit -e use -i com.getdropbox.dropbox.garcon
58
+ /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lssave 0
59
+ (SFLIconTool)
60
+ /Applications/Xcode.app/Contents/SharedFrameworks/DVTSourceControl.framework/Versions/A/XPCServices/com.apple.dt.Xcode.sourcecontrol.Git.xpc/Contents/MacOS/com.apple.dt.Xcode.sourcecontrol.Git
61
+ /Applications/Xcode.app/Contents/SharedFrameworks/DVTSourceControl.framework/Versions/A/XPCServices/com.apple.dt.Xcode.sourcecontrol.Subversion.xpc/Contents/MacOS/com.apple.dt.Xcode.sourcecontrol.Subversion
62
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/sourcekitd.framework/Versions/A/XPCServices/SourceKitService.xpc/Contents/MacOS/SourceKitService
63
+ /Applications/Xcode.app/Contents/SharedFrameworks/DVTSourceControl.framework/Versions/A/XPCServices/com.apple.dt.Xcode.sourcecontrol.WorkingCopyScanner.xpc/Contents/MacOS/com.apple.dt.Xcode.sourcecontrol.WorkingCopyScanner
64
+ /Applications/Xcode.app/Contents/Developer/usr/bin/svn info /Users/oliver/Development/SparrowLabs/sellspot --xml --no-auth-cache
65
+ /Applications/Xcode.app/Contents/Developer/usr/bin/git config --get remote.origin.url
66
+ /Applications/Xcode.app/Contents/Developer/usr/bin/git status --porcelain
67
+ (sh)
68
+ (clang)
69
+ (svn)
70
+ (ld)
71
+ git diff
72
+ less
73
+ (com.apple.iCloud)
74
+ =end
metadata CHANGED
@@ -1,43 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-submit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oliver Letterer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-08 00:00:00.000000000 Z
11
+ date: 2014-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: shenzhen
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0.8'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '0.8'
27
- - !ruby/object:Gem::Dependency
28
- name: xcpretty
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '0.1'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '0.1'
41
13
  - !ruby/object:Gem::Dependency
42
14
  name: plist
43
15
  requirement: !ruby/object:Gem::Requirement
@@ -95,9 +67,14 @@ files:
95
67
  - Rakefile
96
68
  - cocoapods-submit.gemspec
97
69
  - lib/cocoapods_plugin.rb
70
+ - lib/cocoapods_submit.rb
71
+ - lib/cocoapods_submit/build_configuration.rb
72
+ - lib/cocoapods_submit/ipa_builder.rb
73
+ - lib/cocoapods_submit/ipa_uploader.rb
74
+ - lib/cocoapods_submit/provisioning_profile.rb
75
+ - lib/cocoapods_submit/version.rb
98
76
  - lib/pod/command/submit.rb
99
- - lib/provisioning_profile.rb
100
- - lib/version.rb
77
+ - ps.rb
101
78
  homepage: https://github.com/Sparrow-Labs/cocoapods-submit
102
79
  licenses:
103
80
  - MIT
@@ -1,37 +0,0 @@
1
- require 'plist'
2
-
3
- module CocoapodsSubmit
4
- class ProvisioningProfile
5
- def initialize(hash)
6
- @hash = hash
7
- end
8
-
9
- def self.from_uuid(uuid)
10
- from_file File.expand_path File.join "~/Library/MobileDevice/Provisioning Profiles", "#{uuid}.mobileprovision"
11
- end
12
-
13
- def rank
14
- return 0.0 unless @hash
15
-
16
- rank = 1.0
17
- rank *= 0.0 if @hash["Entitlements"]["get-task-allow"]
18
- rank *= 1.0 / @hash["ProvisionedDevices"].count if @hash["ProvisionedDevices"]
19
-
20
- return rank
21
- end
22
-
23
- def self.from_file(path)
24
- return nil unless File.exists? path
25
-
26
- start_string = "<?"
27
- end_string = "</plist>"
28
-
29
- profile = File.read(path)
30
- profile = profile.slice(profile.index(start_string), profile.length)
31
- profile = profile.slice(0, profile.index(end_string) + end_string.length)
32
- profile = Plist::parse_xml(profile)
33
-
34
- new(profile)
35
- end
36
- end
37
- end