cocoapods-submit 0.1.1 → 0.2.0

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.
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