cocoapods-keys 1.4.0 → 1.5.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 +4 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +2 -2
- data/SWIFT_PROJECTS.md +1 -12
- data/lib/cocoapods_keys.rb +1 -1
- data/lib/key_master.rb +3 -0
- data/lib/keyring.rb +22 -4
- data/lib/keyring_liberator.rb +22 -1
- data/lib/name_whisperer.rb +3 -2
- data/lib/plugin.rb +8 -2
- data/lib/pod/command/keys.rb +12 -0
- data/lib/pod/command/keys/get.rb +2 -11
- data/lib/pod/command/keys/list.rb +1 -2
- data/lib/pod/command/keys/rm.rb +0 -9
- data/lib/pod/command/keys/set.rb +1 -13
- data/lib/preinstaller.rb +22 -3
- data/spec/functional_spec.rb +7 -0
- data/spec/key_master_spec.rb +18 -0
- data/spec/keyring_liberator_spec.rb +7 -0
- data/spec/keyring_spec.rb +31 -0
- data/spec/spec_helper.rb +10 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52a2e9e5a65b7647780f3f3bb143293366a86120
|
4
|
+
data.tar.gz: a2c043948ff253e77f4b4defaaaf17a9fb35f9fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9aa97fd504108cfce1a9442f45ea009dcce868a0371e258c7992f432da6b66507021e8b03e0a4c94eb1bdea5b5cadc46e658b0d6d322b55504d653e5de787416
|
7
|
+
data.tar.gz: 695c2710be5f212f3685f065c316eacbe07ef01dcaceca057935a4014d0bff4d3dc3a400e6e42d6e9c2a5ac8a862a550659c753bd44a4155fa3a8b4dba0b4772
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/SWIFT_PROJECTS.md
CHANGED
@@ -3,20 +3,9 @@
|
|
3
3
|
Once you've followed the setup instructions described in the [Usage](/orta/cocoapods-keys#usage)
|
4
4
|
section of the README, you have two choices.
|
5
5
|
|
6
|
-
## Using the bridge header
|
7
|
-
|
8
|
-
If you want to make your keys available to your whole project:
|
9
|
-
|
10
|
-
1. Make sure you have a [bridging header](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html) already setup.
|
11
|
-
2. In the bridging header, import the generated key file:
|
12
|
-
```objectivec
|
13
|
-
#import <Keys/MyApplicationKeys.h>
|
14
|
-
```
|
15
|
-
|
16
6
|
## Importing the framework
|
17
7
|
|
18
|
-
|
19
|
-
specific files, simply use Swift's `import` statement. The name of the generated
|
8
|
+
Use Swift's `import` statement. The name of the generated
|
20
9
|
module is `Keys`.
|
21
10
|
|
22
11
|
```swift
|
data/lib/cocoapods_keys.rb
CHANGED
data/lib/key_master.rb
CHANGED
data/lib/keyring.rb
CHANGED
@@ -6,7 +6,7 @@ module CocoaPodsKeys
|
|
6
6
|
|
7
7
|
def initialize(name, path, keys = [])
|
8
8
|
@name = name.to_s
|
9
|
-
@path = path
|
9
|
+
@path = path.to_s
|
10
10
|
@keys = keys
|
11
11
|
end
|
12
12
|
|
@@ -26,18 +26,36 @@ module CocoaPodsKeys
|
|
26
26
|
'cocoapods-keys-'
|
27
27
|
end
|
28
28
|
|
29
|
+
def keychain
|
30
|
+
@keychain ||= OSXKeychain.new
|
31
|
+
end
|
32
|
+
|
29
33
|
def save(key, value)
|
30
|
-
keychain = OSXKeychain.new
|
31
34
|
keychain[self.class.keychain_prefix + name, key] = value
|
32
35
|
end
|
33
36
|
|
34
37
|
def keychain_data
|
35
|
-
keychain = OSXKeychain.new
|
36
38
|
Hash[
|
37
|
-
@keys.map { |key| [key,
|
39
|
+
@keys.map { |key| [key, keychain_value(key)] }
|
38
40
|
]
|
39
41
|
end
|
40
42
|
|
43
|
+
def keychain_has_key?(key)
|
44
|
+
has_key = !keychain_value(key).nil?
|
45
|
+
|
46
|
+
if has_key && !@keys.include?(key)
|
47
|
+
@keys << key
|
48
|
+
elsif !has_key && @keys.include?(key)
|
49
|
+
@keys.delete(key)
|
50
|
+
end
|
51
|
+
|
52
|
+
has_key
|
53
|
+
end
|
54
|
+
|
55
|
+
def keychain_value(key)
|
56
|
+
ENV[key] || keychain[self.class.keychain_prefix + name, key]
|
57
|
+
end
|
58
|
+
|
41
59
|
def camel_cased_keys
|
42
60
|
Hash[keychain_data.map { |(key, value)| [key[0].downcase + key[1..-1], value] }]
|
43
61
|
end
|
data/lib/keyring_liberator.rb
CHANGED
@@ -24,9 +24,30 @@ module CocoaPodsKeys
|
|
24
24
|
get_all_keyrings.find { |k| k.name == name }
|
25
25
|
end
|
26
26
|
|
27
|
+
def self.get_current_keyring(name, cwd)
|
28
|
+
found_by_name = name && get_all_keyrings.find { |k| k.name == name && k.path == cwd.to_s }
|
29
|
+
found_by_name || KeyringLiberator.get_keyring(cwd)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.get_all_keyrings_named(name)
|
33
|
+
get_all_keyrings.find_all { |k| k.name == name }
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.prompt_if_already_existing(keyring)
|
37
|
+
keyrings = get_all_keyrings_named(keyring.name)
|
38
|
+
already_exists = File.exist?(yaml_path_for_path(keyring.path))
|
39
|
+
if !already_exists && keyrings.any? { |existing_keyring| File.exist?(yaml_path_for_path(existing_keyring.path)) }
|
40
|
+
ui = Pod::UserInterface
|
41
|
+
ui.puts "About to create a duplicate keyring file for project #{keyring.name.green}"
|
42
|
+
ui.puts 'Entries in your Apple Keychain will be shared between both projects.'
|
43
|
+
ui.puts "\nPress enter to continue, or `ctrl + c` to cancel"
|
44
|
+
ui.gets
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
27
48
|
def self.save_keyring(keyring)
|
28
49
|
keys_dir.mkpath
|
29
|
-
|
50
|
+
prompt_if_already_existing(keyring)
|
30
51
|
yaml_path_for_path(keyring.path).open('w') { |f| f.write(YAML.dump(keyring.to_hash)) }
|
31
52
|
end
|
32
53
|
|
data/lib/name_whisperer.rb
CHANGED
@@ -21,12 +21,13 @@ module CocoaPodsKeys
|
|
21
21
|
|
22
22
|
def self.search_folders_for_xcodeproj
|
23
23
|
ui = Pod::UserInterface
|
24
|
-
xcodeprojects = Pathname.glob('**/*.xcodeproj')
|
24
|
+
xcodeprojects = Pathname.glob('**/*.xcodeproj').reject { |path| path.to_s.start_with?('Pods/') }
|
25
25
|
if xcodeprojects.length == 1
|
26
26
|
Pathname(xcodeprojects.first).basename('.xcodeproj')
|
27
27
|
else
|
28
28
|
error_message = (xcodeprojects.length > 1) ? 'found too many' : "couldn't find any"
|
29
|
-
|
29
|
+
projects = xcodeprojects.map(&:basename).join(' ')
|
30
|
+
ui.puts 'CocoaPods-Keys ' + error_message + ' Xcode projects (' + projects + '). Please give a name for this project.'
|
30
31
|
|
31
32
|
answer = ''
|
32
33
|
loop do
|
data/lib/plugin.rb
CHANGED
@@ -25,8 +25,7 @@ module CocoaPodsKeys
|
|
25
25
|
local_user_options = user_options || {}
|
26
26
|
project = local_user_options.fetch('project') { CocoaPodsKeys::NameWhisperer.get_project_name }
|
27
27
|
|
28
|
-
keyring = KeyringLiberator.
|
29
|
-
KeyringLiberator.get_keyring(Dir.getwd) ||
|
28
|
+
keyring = KeyringLiberator.get_current_keyring(project, Dir.getwd) ||
|
30
29
|
Keyring.new(project, Dir.getwd, local_user_options['keys'])
|
31
30
|
|
32
31
|
raise Pod::Informative, 'Could not load keyring' unless keyring
|
@@ -41,6 +40,13 @@ module CocoaPodsKeys
|
|
41
40
|
|
42
41
|
# Add our template podspec
|
43
42
|
add_keys_to_pods(keys_path.relative_path_from(installation_root), user_options)
|
43
|
+
|
44
|
+
# Remove the shared scheme for this pod
|
45
|
+
Pod::HooksManager.register('cocoapods-keys', :post_install) do |context, user_options|
|
46
|
+
shared_scheme_path = "Pods/Pods.xcodeproj/xcshareddata/xcschemes/Keys.xcscheme"
|
47
|
+
FileUtils.rm(shared_scheme_path) if File.exist?(shared_scheme_path)
|
48
|
+
end
|
49
|
+
|
44
50
|
end
|
45
51
|
|
46
52
|
def add_keys_to_pods(keys_path, options)
|
data/lib/pod/command/keys.rb
CHANGED
@@ -16,6 +16,18 @@ module Pod
|
|
16
16
|
|
17
17
|
self.abstract_command = true
|
18
18
|
self.default_subcommand = 'list'
|
19
|
+
|
20
|
+
def create_keyring
|
21
|
+
current_dir = Pathname.pwd
|
22
|
+
name = @project_name || CocoaPodsKeys::NameWhisperer.get_project_name
|
23
|
+
CocoaPodsKeys::Keyring.new(name, current_dir, [])
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_current_keyring
|
27
|
+
current_dir = Pathname.pwd
|
28
|
+
project = @project_name || CocoaPodsKeys::NameWhisperer.get_project_name
|
29
|
+
CocoaPodsKeys::KeyringLiberator.get_current_keyring(project, current_dir)
|
30
|
+
end
|
19
31
|
end
|
20
32
|
end
|
21
33
|
end
|
data/lib/pod/command/keys/get.rb
CHANGED
@@ -35,21 +35,12 @@ module Pod
|
|
35
35
|
end
|
36
36
|
|
37
37
|
if keyring.keys.include? @key_name
|
38
|
-
data = keyring.
|
39
|
-
UI.puts data
|
38
|
+
data = keyring.keychain_value(@key_name)
|
39
|
+
UI.puts data
|
40
40
|
else
|
41
41
|
raise Informative, 'Could not find value'
|
42
42
|
end
|
43
43
|
end
|
44
|
-
|
45
|
-
def get_current_keyring
|
46
|
-
current_dir = Pathname.pwd
|
47
|
-
keyring = CocoaPodsKeys::KeyringLiberator.get_keyring current_dir
|
48
|
-
if !keyring && @project_name
|
49
|
-
return CocoaPodsKeys::KeyringLiberator.get_keyring_named @project_name
|
50
|
-
end
|
51
|
-
keyring
|
52
|
-
end
|
53
44
|
end
|
54
45
|
end
|
55
46
|
end
|
@@ -14,13 +14,12 @@ module Pod
|
|
14
14
|
|
15
15
|
def run
|
16
16
|
# List all settings for current app
|
17
|
-
this_keyring =
|
17
|
+
this_keyring = get_current_keyring
|
18
18
|
if this_keyring
|
19
19
|
display_current_keyring this_keyring
|
20
20
|
end
|
21
21
|
|
22
22
|
# List all known bundle ids
|
23
|
-
|
24
23
|
all_keyrings = CocoaPodsKeys::KeyringLiberator.get_all_keyrings
|
25
24
|
all_keyrings.each do |keyring|
|
26
25
|
display_keyring(keyring) if !this_keyring || keyring.path != this_keyring.path
|
data/lib/pod/command/keys/rm.rb
CHANGED
@@ -55,15 +55,6 @@ module Pod
|
|
55
55
|
raise Informative, "Could not find key named #{@key_name}."
|
56
56
|
end
|
57
57
|
end
|
58
|
-
|
59
|
-
def get_current_keyring
|
60
|
-
current_dir = Pathname.pwd
|
61
|
-
keyring = CocoaPodsKeys::KeyringLiberator.get_keyring current_dir
|
62
|
-
if !keyring && @project_name
|
63
|
-
return CocoaPodsKeys::KeyringLiberator.get_keyring_named @project_name
|
64
|
-
end
|
65
|
-
keyring
|
66
|
-
end
|
67
58
|
end
|
68
59
|
end
|
69
60
|
end
|
data/lib/pod/command/keys/set.rb
CHANGED
@@ -38,7 +38,7 @@ module Pod
|
|
38
38
|
# set a key to a folder id in ~/.cocoapods/keys
|
39
39
|
# info "Saving into the keychain."
|
40
40
|
|
41
|
-
keyring =
|
41
|
+
keyring = get_current_keyring || create_keyring
|
42
42
|
keyring.keys << @key_name.tr('-', '_')
|
43
43
|
CocoaPodsKeys::KeyringLiberator.save_keyring keyring
|
44
44
|
|
@@ -46,18 +46,6 @@ module Pod
|
|
46
46
|
|
47
47
|
UI.puts "Saved #{@key_name} to #{keyring.name}." unless config.silent?
|
48
48
|
end
|
49
|
-
|
50
|
-
def current_keyring
|
51
|
-
current_dir = Pathname.pwd
|
52
|
-
keyring = CocoaPodsKeys::KeyringLiberator.get_keyring current_dir
|
53
|
-
|
54
|
-
unless keyring
|
55
|
-
name = @project_name || CocoaPodsKeys::NameWhisperer.get_project_name
|
56
|
-
keyring = CocoaPodsKeys::Keyring.new(name, current_dir, [])
|
57
|
-
end
|
58
|
-
|
59
|
-
keyring
|
60
|
-
end
|
61
49
|
end
|
62
50
|
end
|
63
51
|
end
|
data/lib/preinstaller.rb
CHANGED
@@ -17,16 +17,20 @@ module CocoaPodsKeys
|
|
17
17
|
options = @user_options || {}
|
18
18
|
current_dir = Pathname.pwd
|
19
19
|
project = options.fetch('project') { CocoaPodsKeys::NameWhisperer.get_project_name }
|
20
|
-
|
20
|
+
|
21
|
+
keyring = KeyringLiberator.get_current_keyring(project, current_dir)
|
22
|
+
|
23
|
+
unless keyring
|
24
|
+
check_for_multiple_keyrings(project, current_dir)
|
25
|
+
end
|
21
26
|
|
22
27
|
existing_keyring = !keyring.nil?
|
23
28
|
keyring = CocoaPodsKeys::Keyring.new(project, current_dir, []) unless keyring
|
24
29
|
|
25
|
-
data = keyring.keychain_data
|
26
30
|
has_shown_intro = false
|
27
31
|
keys = options.fetch('keys', [])
|
28
32
|
keys.each do |key|
|
29
|
-
unless
|
33
|
+
unless keyring.keychain_has_key?(key)
|
30
34
|
unless has_shown_intro
|
31
35
|
ui.puts "\n CocoaPods-Keys has detected a keys mismatch for your setup."
|
32
36
|
has_shown_intro = true
|
@@ -46,8 +50,23 @@ module CocoaPodsKeys
|
|
46
50
|
setter.run
|
47
51
|
end
|
48
52
|
end
|
53
|
+
CocoaPodsKeys::KeyringLiberator.save_keyring(keyring)
|
49
54
|
|
50
55
|
existing_keyring || !keys.empty?
|
51
56
|
end
|
57
|
+
|
58
|
+
def check_for_multiple_keyrings(project, current_dir)
|
59
|
+
ui = Pod::UserInterface
|
60
|
+
keyrings = KeyringLiberator.get_all_keyrings_named(project)
|
61
|
+
if keyrings.count > 1
|
62
|
+
ui.puts "Found multiple keyrings for project #{project.inspect}, but"
|
63
|
+
ui.puts "no match found for current path (#{current_dir}):"
|
64
|
+
keyrings.each do |found_keyring|
|
65
|
+
ui.puts "- #{found_keyring.path}"
|
66
|
+
end
|
67
|
+
ui.puts "\nPress enter to create a new keyring, or `ctrl + c` to cancel"
|
68
|
+
ui.gets
|
69
|
+
end
|
70
|
+
end
|
52
71
|
end
|
53
72
|
end
|
data/spec/functional_spec.rb
CHANGED
@@ -29,6 +29,13 @@ describe 'CocoaPodsKeys functional tests' do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
after :all do
|
33
|
+
KeyringLiberator.get_all_keyrings_named('TestProject').each do |keyring|
|
34
|
+
file = KeyringLiberator.yaml_path_for_path(keyring.path)
|
35
|
+
FileUtils.rm(file) if File.exist?(file)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
32
39
|
it 'does not directly encode the keys into the implementation file' do
|
33
40
|
source = File.read(File.join(@tmpdir, 'Pods/CocoaPodsKeys/TestProjectKeys.m'))
|
34
41
|
expect(source).to_not include('such-data')
|
data/spec/key_master_spec.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'keyring'
|
2
3
|
require 'key_master'
|
3
4
|
require 'tmpdir'
|
4
5
|
|
6
|
+
include CocoaPodsKeys
|
7
|
+
|
5
8
|
describe CocoaPodsKeys::KeyMaster do
|
6
9
|
# Previous tests operated under assumption that
|
7
10
|
# empty keychains were OK. See for more info:
|
@@ -23,4 +26,19 @@ describe CocoaPodsKeys::KeyMaster do
|
|
23
26
|
system(`xcrun --sdk macosx --find clang`.strip, '-fsyntax-only', m_file)
|
24
27
|
end
|
25
28
|
end
|
29
|
+
|
30
|
+
describe '#name' do
|
31
|
+
it 'takes keyring with name that starts with number returns augmented the name with underscore' do
|
32
|
+
keyring = Keyring.new('500px', '/', ['ARMyKey'])
|
33
|
+
keyring.instance_variable_set(:@keychain, FakeKeychain.new('ARMyKey' => 'secretkey'))
|
34
|
+
key_master = KeyMaster.new(keyring)
|
35
|
+
expect(key_master.name).to eq('_500pxKeys')
|
36
|
+
end
|
37
|
+
it 'takes keyring with proper name returns proper Keys file' do
|
38
|
+
keyring = Keyring.new('Artsy', '/', ['ARMyKey'])
|
39
|
+
keyring.instance_variable_set(:@keychain, FakeKeychain.new('ARMyKey' => 'secretkey'))
|
40
|
+
key_master = KeyMaster.new(keyring)
|
41
|
+
expect(key_master.name).to eq('ArtsyKeys')
|
42
|
+
end
|
43
|
+
end
|
26
44
|
end
|
@@ -21,6 +21,13 @@ describe KeyringLiberator do
|
|
21
21
|
expect(KeyringLiberator.get_keyring_named('test')).to equal(keyring)
|
22
22
|
end
|
23
23
|
|
24
|
+
it 'should find many by name' do
|
25
|
+
keyring1 = Keyring.from_hash('name' => 'test', 'path' => 'testpath1', 'keys' => [])
|
26
|
+
keyring2 = Keyring.from_hash('name' => 'test', 'path' => 'testpath2', 'keys' => [])
|
27
|
+
allow(KeyringLiberator).to receive(:get_all_keyrings).and_return([keyring1, keyring2])
|
28
|
+
expect(KeyringLiberator.get_all_keyrings_named('test')).to eq([keyring1, keyring2])
|
29
|
+
end
|
30
|
+
|
24
31
|
it 'should be nil if nothing found find by name' do
|
25
32
|
keyring = Keyring.from_hash('name' => 'test', 'path' => 'testpath', 'keys' => [])
|
26
33
|
allow(KeyringLiberator).to receive(:get_all_keyrings).and_return([keyring])
|
data/spec/keyring_spec.rb
CHANGED
@@ -16,4 +16,35 @@ describe KeyringLiberator do
|
|
16
16
|
keyring = Keyring.new('test', '/', ['ARMyKey'])
|
17
17
|
expect(keyring.keychain_data).to eq('ARMyKey' => 'Hello')
|
18
18
|
end
|
19
|
+
|
20
|
+
it 'looks up keys from the OSXKeychain' do
|
21
|
+
keyring = Keyring.new('test', '/', ['ARMyKey'])
|
22
|
+
keyring.instance_variable_set(:@keychain, FakeKeychain.new('KeychainKey' => 'abcde'))
|
23
|
+
expect(keyring.keychain_has_key?('KeychainKey')).to be_truthy
|
24
|
+
expect(keyring.keychain_value('KeychainKey')).to eq('abcde')
|
25
|
+
expect(keyring.keychain_has_key?('NotMyKey')).to be_falsey
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'looks up keys from ENV' do
|
29
|
+
keyring = Keyring.new('test', '/', ['ARMyKey'])
|
30
|
+
ENV['EnvKey'] = '12345'
|
31
|
+
keyring.instance_variable_set(:@keychain, FakeKeychain.new('KeychainKey' => 'abcde'))
|
32
|
+
expect(keyring.keychain_has_key?('EnvKey')).to be_truthy
|
33
|
+
expect(keyring.keychain_value('EnvKey')).to eq('12345')
|
34
|
+
expect(keyring.keychain_has_key?('NotMyKey')).to be_falsey
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'updates its list of keys' do
|
38
|
+
keyring = Keyring.new('test', '/', ['NotMyKey'])
|
39
|
+
ENV['EnvKey'] = '12345'
|
40
|
+
keyring.instance_variable_set(:@keychain, FakeKeychain.new('KeychainKey' => 'abcde'))
|
41
|
+
|
42
|
+
keyring.keychain_has_key?('KeychainKey')
|
43
|
+
keyring.keychain_has_key?('EnvKey')
|
44
|
+
keyring.keychain_has_key?('NotMyKey')
|
45
|
+
|
46
|
+
expect(keyring.keys.include?('KeychainKey')).to be_truthy
|
47
|
+
expect(keyring.keys.include?('EnvKey')).to be_truthy
|
48
|
+
expect(keyring.keys.include?('NotMyKey')).to be_falsey
|
49
|
+
end
|
19
50
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-keys
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Orta Therox
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-09-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: osx_keychain
|