ambient-xcode 0.2.0 → 0.3.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/README.md +14 -0
- data/ambient-xcode.gemspec +1 -2
- data/bin/ambient +2 -1
- data/lib/ambient.rb +34 -15
- data/lib/capabilities_helper.rb +59 -0
- data/lib/dsl.rb +9 -0
- data/lib/project_helper.rb +18 -8
- metadata +3 -16
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 74297d6847b0d837aeb70f2f86eecf4ff2644f6e
         | 
| 4 | 
            +
              data.tar.gz: 8b4450eab0effc1c41ddcebc70c350d0aa9b05c7
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 079fe3f096c467c9f7a35423cec8b13b14e601e88d14ee418987deac1fcadf9443ce3dd559fa257c831d90edaea443431344b20611e5f62b480ca49376dd74cc
         | 
| 7 | 
            +
              data.tar.gz: 329c5495cf88b45dc37fb8c7078669ffc08c2da508c9cbf84552daa326835c222c94cb1acb61a63b213a701ca103d8c4cabefd21cf7c907e05cfc1b28b01208e
         | 
    
        data/README.md
    CHANGED
    
    | @@ -34,6 +34,9 @@ option "CLANG_ENABLE_OBJC_ARC", true | |
| 34 34 | 
             
            option "CLANG_ENABLE_MODULES", true
         | 
| 35 35 |  | 
| 36 36 | 
             
            target "MyProject" do
         | 
| 37 | 
            +
              capability :healthkit
         | 
| 38 | 
            +
              capability :apple_pay
         | 
| 39 | 
            +
             | 
| 37 40 | 
             
              scheme "Debug" do
         | 
| 38 41 | 
             
                option "PRODUCT_NAME", "Debug"
         | 
| 39 42 | 
             
                option "BUNDLE_DISPLAY_NAME_SUFFIX", "uk.danielgreen.MyProject"
         | 
| @@ -45,6 +48,17 @@ Run `ambient` from the command line to write your settings into your project. | |
| 45 48 |  | 
| 46 49 | 
             
            The [example Ambientfile](https://github.com/Dan2552/ambient-xcode/blob/master/example/Ambientfile) matches the exact settings of a new iOS project.
         | 
| 47 50 |  | 
| 51 | 
            +
            If for any reason you want multiple Ambientfile, you can:
         | 
| 52 | 
            +
            ```
         | 
| 53 | 
            +
            use_settings_from 'Ambientfile'
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            target "Babylon" do
         | 
| 56 | 
            +
              capability :apple_pay
         | 
| 57 | 
            +
            end
         | 
| 58 | 
            +
            ```
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            Just run `ambient [filename]` (i.e. `ambient Ambientfile-enterprise`)
         | 
| 61 | 
            +
             | 
| 48 62 | 
             
            Notes
         | 
| 49 63 | 
             
            =====
         | 
| 50 64 |  | 
    
        data/ambient-xcode.gemspec
    CHANGED
    
    | @@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) | |
| 3 3 |  | 
| 4 4 | 
             
            Gem::Specification.new do |gem|
         | 
| 5 5 | 
             
              gem.name          = 'ambient-xcode'
         | 
| 6 | 
            -
              gem.version       = '0. | 
| 6 | 
            +
              gem.version       = '0.3.0'
         | 
| 7 7 | 
             
              gem.authors       = ['Daniel Green']
         | 
| 8 8 | 
             
              gem.email         = ['dan2552@gmail.com']
         | 
| 9 9 | 
             
              gem.description   = %q{CLI for configuring Xcode projects from a Ruby file.}
         | 
| @@ -12,7 +12,6 @@ Gem::Specification.new do |gem| | |
| 12 12 | 
             
              gem.license       = 'MIT'
         | 
| 13 13 |  | 
| 14 14 | 
             
              gem.add_dependency 'xcodeproj', '~> 0.25'
         | 
| 15 | 
            -
              gem.add_dependency 'highline', '~> 1.6'
         | 
| 16 15 |  | 
| 17 16 | 
             
              gem.files         = `git ls-files`.split($/)
         | 
| 18 17 | 
             
              gem.executables   = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
         | 
    
        data/bin/ambient
    CHANGED
    
    
    
        data/lib/ambient.rb
    CHANGED
    
    | @@ -7,6 +7,7 @@ unless Kernel.respond_to?(:require_relative) | |
| 7 7 | 
             
            end
         | 
| 8 8 |  | 
| 9 9 | 
             
            require_relative 'project_helper'
         | 
| 10 | 
            +
            require_relative 'capabilities_helper'
         | 
| 10 11 | 
             
            require_relative 'dsl'
         | 
| 11 12 |  | 
| 12 13 | 
             
            module Ambient
         | 
| @@ -19,6 +20,7 @@ module Ambient | |
| 19 20 | 
             
              @target_options = {}
         | 
| 20 21 | 
             
              @scheme_options = {}
         | 
| 21 22 | 
             
              @parents = {}
         | 
| 23 | 
            +
              @capabilities = {}
         | 
| 22 24 |  | 
| 23 25 | 
             
              def configure(&block)
         | 
| 24 26 | 
             
                instance_eval &block
         | 
| @@ -57,28 +59,38 @@ module Ambient | |
| 57 59 | 
             
                end
         | 
| 58 60 | 
             
              end
         | 
| 59 61 |  | 
| 60 | 
            -
              def  | 
| 62 | 
            +
              def set_capability(target_name, capability_name)
         | 
| 63 | 
            +
                capabilities = @capabilities[target_name] ||= []
         | 
| 64 | 
            +
                capabilities << capability_name
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              def setup_project(ambientfile)
         | 
| 68 | 
            +
                run_ambientfile(ambientfile)
         | 
| 61 69 | 
             
                project_helper.print_info
         | 
| 62 | 
            -
                reset_project_to_defaults
         | 
| 63 | 
            -
                reset_targets_to_defaults
         | 
| 70 | 
            +
                reset_project_to_defaults if @use_defaults
         | 
| 71 | 
            +
                reset_targets_to_defaults if @use_defaults
         | 
| 72 | 
            +
                reset_capabilites_to_defaults if @use_defaults
         | 
| 64 73 | 
             
                process_project_options
         | 
| 65 74 | 
             
                process_scheme_options
         | 
| 66 75 | 
             
                process_shared_target_options
         | 
| 67 76 | 
             
                process_target_options
         | 
| 77 | 
            +
                process_capabilities
         | 
| 78 | 
            +
                project_helper.save_changes
         | 
| 68 79 | 
             
              end
         | 
| 69 80 |  | 
| 70 81 | 
             
              def reset_project_to_defaults
         | 
| 71 | 
            -
                 | 
| 72 | 
            -
             | 
| 73 | 
            -
                  project_helper.reset_project_to_defaults
         | 
| 74 | 
            -
                end
         | 
| 82 | 
            +
                puts "resetting project settings to xcode default settings"
         | 
| 83 | 
            +
                project_helper.reset_project_to_defaults
         | 
| 75 84 | 
             
              end
         | 
| 76 85 |  | 
| 77 86 | 
             
              def reset_targets_to_defaults
         | 
| 78 | 
            -
                 | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 87 | 
            +
                puts "resetting target settings to xcode default settings"
         | 
| 88 | 
            +
                project_helper.reset_targets_to_defaults
         | 
| 89 | 
            +
              end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
              def reset_capabilites_to_defaults
         | 
| 92 | 
            +
                puts "resetting capabilities to xcode default settings"
         | 
| 93 | 
            +
                project_helper.reset_capabilities_to_defaults
         | 
| 82 94 | 
             
              end
         | 
| 83 95 |  | 
| 84 96 | 
             
              def process_project_options
         | 
| @@ -102,6 +114,11 @@ module Ambient | |
| 102 114 | 
             
                project_helper.process_target_options(@target_options)
         | 
| 103 115 | 
             
              end
         | 
| 104 116 |  | 
| 117 | 
            +
              def process_capabilities
         | 
| 118 | 
            +
                puts "applying ambient capabilities"
         | 
| 119 | 
            +
                project_helper.process_capabilities(@capabilities)
         | 
| 120 | 
            +
              end
         | 
| 121 | 
            +
             | 
| 105 122 | 
             
              def load_in_parent_target_values
         | 
| 106 123 | 
             
                @parents.each do |target, parents|
         | 
| 107 124 | 
             
                  parents.each do |child, parent|
         | 
| @@ -115,8 +132,10 @@ module Ambient | |
| 115 132 | 
             
                end
         | 
| 116 133 | 
             
              end
         | 
| 117 134 |  | 
| 118 | 
            -
               | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 135 | 
            +
              def run_ambientfile(filename)
         | 
| 136 | 
            +
                puts "Reading settings from #{filename}"
         | 
| 137 | 
            +
                ambient = File.join(Dir.pwd, filename)
         | 
| 138 | 
            +
                raise "#{filename} not found in current directory." unless File.exists?(ambient)
         | 
| 139 | 
            +
                load ambient
         | 
| 140 | 
            +
              end
         | 
| 122 141 | 
             
            end
         | 
| @@ -0,0 +1,59 @@ | |
| 1 | 
            +
            require 'xcodeproj'
         | 
| 2 | 
            +
            class CapabilitiesHelper
         | 
| 3 | 
            +
              CAPABILITIES = {
         | 
| 4 | 
            +
                application_group_ios: "ApplicationGroups.iOS",
         | 
| 5 | 
            +
                background_modes: "BackgroundModes",
         | 
| 6 | 
            +
                data_protection: "DataProtection",
         | 
| 7 | 
            +
                game_center: "GameCenter",
         | 
| 8 | 
            +
                healthkit: "HealthKit",
         | 
| 9 | 
            +
                health_kit: "HealthKit",
         | 
| 10 | 
            +
                homekit: "HomeKit",
         | 
| 11 | 
            +
                home_kit: "HomeKit",
         | 
| 12 | 
            +
                in_app_purchase: "InAppPurchase",
         | 
| 13 | 
            +
                inter_app_audio: "InterAppAudio",
         | 
| 14 | 
            +
                keychain: "Keychain",
         | 
| 15 | 
            +
                maps: "Maps.iOS",
         | 
| 16 | 
            +
                apple_pay: "OMC",
         | 
| 17 | 
            +
                passbook: "Passbook",
         | 
| 18 | 
            +
                wallet: "Passbook",
         | 
| 19 | 
            +
                safari_keychain: "SafariKeychain",
         | 
| 20 | 
            +
                personal_vpn: "VPNLite",
         | 
| 21 | 
            +
                wireless_accessory_configuration: "WAC",
         | 
| 22 | 
            +
                icloud: "iCloud"
         | 
| 23 | 
            +
              }
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              def initialize(project, target)
         | 
| 26 | 
            +
                @project = project
         | 
| 27 | 
            +
                @target = target
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              def clear_capabilities
         | 
| 31 | 
            +
                capabilities.delete_if { |_, _| true } if capabilities
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              def enable_capability(capability)
         | 
| 35 | 
            +
                capabilities[capability_key(capability)] = {"enabled"=>"1"}
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              def disable_capability(capability)
         | 
| 39 | 
            +
                capabilities.delete(capability_key(capability))
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              private
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              def capabilities
         | 
| 45 | 
            +
                target_attributes["SystemCapabilities"]
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              def target_attributes
         | 
| 49 | 
            +
                @project.root_object.attributes["TargetAttributes"][@target.uuid]
         | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
              def capability_key(capability)
         | 
| 53 | 
            +
                capability = CAPABILITIES[capability] || capability.to_s
         | 
| 54 | 
            +
                prefix = "com.apple."
         | 
| 55 | 
            +
                capability = "#{prefix}#{capability}" unless capability.start_with? prefix
         | 
| 56 | 
            +
                capability
         | 
| 57 | 
            +
              end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
            end
         | 
    
        data/lib/dsl.rb
    CHANGED
    
    | @@ -1,3 +1,7 @@ | |
| 1 | 
            +
            def use_settings_from(filename)
         | 
| 2 | 
            +
              Ambient.configure { run_ambientfile(filename) }
         | 
| 3 | 
            +
            end
         | 
| 4 | 
            +
             | 
| 1 5 | 
             
            def option(name, value)
         | 
| 2 6 | 
             
              Ambient.configure { set_option(name, value) }
         | 
| 3 7 | 
             
            end
         | 
| @@ -84,6 +88,11 @@ class TargetScope | |
| 84 88 | 
             
              def scheme(name, parent: nil, &block)
         | 
| 85 89 | 
             
                SchemeScope.new(self, name, parent).configure(&block)
         | 
| 86 90 | 
             
              end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
              def capability(capability_name)
         | 
| 93 | 
            +
                target_name = @name
         | 
| 94 | 
            +
                Ambient.configure { set_capability(target_name, capability_name) }
         | 
| 95 | 
            +
              end
         | 
| 87 96 | 
             
            end
         | 
| 88 97 |  | 
| 89 98 | 
             
            class SchemeScope
         | 
    
        data/lib/project_helper.rb
    CHANGED
    
    | @@ -1,5 +1,4 @@ | |
| 1 1 | 
             
            require 'xcodeproj'
         | 
| 2 | 
            -
            require 'highline/import'
         | 
| 3 2 |  | 
| 4 3 | 
             
            class ProjectHelper
         | 
| 5 4 | 
             
              PROJECTS = Dir.glob('*.xcodeproj')
         | 
| @@ -13,7 +12,6 @@ class ProjectHelper | |
| 13 12 | 
             
                  build_settings = configuration.build_settings
         | 
| 14 13 | 
             
                  build_settings.each { |k, _| build_settings.delete(k) }
         | 
| 15 14 | 
             
                end
         | 
| 16 | 
            -
                save_changes
         | 
| 17 15 | 
             
              end
         | 
| 18 16 |  | 
| 19 17 | 
             
              def reset_targets_to_defaults
         | 
| @@ -25,6 +23,12 @@ class ProjectHelper | |
| 25 23 | 
             
                end
         | 
| 26 24 | 
             
              end
         | 
| 27 25 |  | 
| 26 | 
            +
              def reset_capabilities_to_defaults
         | 
| 27 | 
            +
                @project.targets.each do |target|
         | 
| 28 | 
            +
                  CapabilitiesHelper.new(@project, target).clear_capabilities
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 28 32 | 
             
              def process_project_options(options)
         | 
| 29 33 | 
             
                @project.build_configurations.each do |configuration|
         | 
| 30 34 | 
             
                  options.each do |key, value|
         | 
| @@ -32,7 +36,6 @@ class ProjectHelper | |
| 32 36 | 
             
                    configuration.build_settings.delete(key) if value == nil
         | 
| 33 37 | 
             
                  end
         | 
| 34 38 | 
             
                end
         | 
| 35 | 
            -
                save_changes
         | 
| 36 39 | 
             
              end
         | 
| 37 40 |  | 
| 38 41 | 
             
              def process_shared_target_options(shared_target_options)
         | 
| @@ -44,7 +47,6 @@ class ProjectHelper | |
| 44 47 | 
             
                    end
         | 
| 45 48 | 
             
                  end
         | 
| 46 49 | 
             
                end
         | 
| 47 | 
            -
                save_changes
         | 
| 48 50 | 
             
              end
         | 
| 49 51 |  | 
| 50 52 | 
             
              def process_target_options(target_options)
         | 
| @@ -59,7 +61,17 @@ class ProjectHelper | |
| 59 61 | 
             
                    end
         | 
| 60 62 | 
             
                  end
         | 
| 61 63 | 
             
                end
         | 
| 62 | 
            -
             | 
| 64 | 
            +
              end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
              def process_capabilities(capabilities_hash)
         | 
| 67 | 
            +
                capabilities_hash.each do |target_name, capabilities|
         | 
| 68 | 
            +
                  @project.targets.each do |target|
         | 
| 69 | 
            +
                    if target_name == target.to_s
         | 
| 70 | 
            +
                      helper = CapabilitiesHelper.new(@project, target)
         | 
| 71 | 
            +
                      capabilities.each { |c| helper.enable_capability(c) }
         | 
| 72 | 
            +
                    end
         | 
| 73 | 
            +
                  end
         | 
| 74 | 
            +
                end
         | 
| 63 75 | 
             
              end
         | 
| 64 76 |  | 
| 65 77 | 
             
              def process_scheme_options(options)
         | 
| @@ -70,7 +82,6 @@ class ProjectHelper | |
| 70 82 | 
             
                    configuration.build_settings.delete(key) if value == nil
         | 
| 71 83 | 
             
                  end
         | 
| 72 84 | 
             
                end
         | 
| 73 | 
            -
                save_changes
         | 
| 74 85 | 
             
              end
         | 
| 75 86 |  | 
| 76 87 | 
             
              def print_info
         | 
| @@ -82,9 +93,8 @@ class ProjectHelper | |
| 82 93 | 
             
                puts ""
         | 
| 83 94 | 
             
              end
         | 
| 84 95 |  | 
| 85 | 
            -
              private
         | 
| 86 | 
            -
             | 
| 87 96 | 
             
              def save_changes
         | 
| 88 97 | 
             
                @project.save
         | 
| 89 98 | 
             
              end
         | 
| 99 | 
            +
             | 
| 90 100 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ambient-xcode
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Daniel Green
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015-07- | 
| 11 | 
            +
            date: 2015-07-15 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: xcodeproj
         | 
| @@ -24,20 +24,6 @@ dependencies: | |
| 24 24 | 
             
                - - "~>"
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 26 | 
             
                    version: '0.25'
         | 
| 27 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            -
              name: highline
         | 
| 29 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            -
                requirements:
         | 
| 31 | 
            -
                - - "~>"
         | 
| 32 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: '1.6'
         | 
| 34 | 
            -
              type: :runtime
         | 
| 35 | 
            -
              prerelease: false
         | 
| 36 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            -
                requirements:
         | 
| 38 | 
            -
                - - "~>"
         | 
| 39 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: '1.6'
         | 
| 41 27 | 
             
            description: CLI for configuring Xcode projects from a Ruby file.
         | 
| 42 28 | 
             
            email:
         | 
| 43 29 | 
             
            - dan2552@gmail.com
         | 
| @@ -51,6 +37,7 @@ files: | |
| 51 37 | 
             
            - bin/ambient
         | 
| 52 38 | 
             
            - example/Ambientfile
         | 
| 53 39 | 
             
            - lib/ambient.rb
         | 
| 40 | 
            +
            - lib/capabilities_helper.rb
         | 
| 54 41 | 
             
            - lib/dsl.rb
         | 
| 55 42 | 
             
            - lib/project_helper.rb
         | 
| 56 43 | 
             
            homepage: https://github.com/Dan2552/ambient
         |