ambient-xcode 0.5.1 → 0.6.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 -20
- data/ambient-xcode.gemspec +3 -2
- data/example/Ambientfile +5 -61
- data/example/Ambientfile-objc +8 -0
- data/example/{Ambientfile-swift → Ambientfile-verbose} +0 -3
- data/lib/ambient.rb +2 -1
- data/lib/dsl.rb +94 -0
- data/lib/plist_helper.rb +29 -0
- data/lib/project_helper.rb +1 -0
- metadata +20 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71ecb6caa8059718bc5587df94fefe7a7ded74e5
|
4
|
+
data.tar.gz: ace88b9f5419157c109fe6826af14e504a6e89fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75d57629a7ad52ab157454e511ef074475cfb5c7e656ef58e679bd942a78fc56a15d9566d1864da252383308042e05aea388ca2f9463f4475147190d09033603
|
7
|
+
data.tar.gz: 96233c4bb64322f6aac12d535aa44d04c0233384572ee65f2c8047703ed750aff898ef3babfc18b3e0204752e808928b195807cfd21e1d75c94309e603589ac6
|
data/README.md
CHANGED
@@ -1,20 +1,21 @@
|
|
1
1
|
Ambient environment for Xcode projects
|
2
2
|
======================================
|
3
3
|
|
4
|
-
Ambient lets you define all of your
|
4
|
+
Ambient lets you define all of your Xcode project environment settings all in one easy to read Ruby file, and re-apply it to your Xcode project to ensure settings are correct.
|
5
5
|
|
6
6
|
An `xcconfig` file can be used in order to help abstract your settings away from the main project file. The disadvantage of `xcconfig` files though is that they can still be overridden by settings defined in the project. Ambient doesn't have this issue as it simply overwrites the values in the project file.
|
7
7
|
|
8
|
+
|
8
9
|
Installation
|
9
10
|
============
|
10
11
|
|
11
12
|
Simply run:
|
12
|
-
```
|
13
|
+
```bash
|
13
14
|
gem install ambient-xcode
|
14
15
|
```
|
15
16
|
|
16
17
|
Or if you use Bundler, add the following to your `Gemfile`:
|
17
|
-
```
|
18
|
+
```ruby
|
18
19
|
gem "ambient-xcode"
|
19
20
|
```
|
20
21
|
|
@@ -25,13 +26,7 @@ Create an `Ambientfile` defining your project in the same directory as your `*.x
|
|
25
26
|
|
26
27
|
Here's a sample of the `Ambientfile` structure:
|
27
28
|
```ruby
|
28
|
-
|
29
|
-
use_defaults_for_everything_not_specified_in_this_file!
|
30
|
-
|
31
|
-
option "IPHONEOS_DEPLOYMENT_TARGET", "7.0"
|
32
|
-
option "SDKROOT", "iphoneos"
|
33
|
-
option "CLANG_ENABLE_OBJC_ARC", true
|
34
|
-
option "CLANG_ENABLE_MODULES", true
|
29
|
+
base_ios_settings! "MyProject"
|
35
30
|
|
36
31
|
target "MyProject" do
|
37
32
|
capability :healthkit
|
@@ -42,17 +37,17 @@ target "MyProject" do
|
|
42
37
|
option "BUNDLE_DISPLAY_NAME_SUFFIX", "uk.danielgreen.MyProject"
|
43
38
|
end
|
44
39
|
end
|
45
|
-
```
|
46
40
|
|
47
|
-
|
48
|
-
|
41
|
+
plist("MyProject/Info.plist") do
|
42
|
+
entry "LSApplicationQueriesSchemes", [ "dbapi-2", "dbapi-8-emm"]
|
43
|
+
end
|
44
|
+
```
|
49
45
|
|
50
46
|
Run `ambient` from the command line to write your settings into your project.
|
51
47
|
|
52
|
-
|
48
|
+
If you want, you can have a multiple `Ambientfile` for the same project. Just name it something else and run `ambient [filename]` (e.g. `ambient Ambientfile-enterprise`)
|
53
49
|
|
54
|
-
|
55
|
-
```
|
50
|
+
```ruby
|
56
51
|
use_settings_from 'Ambientfile' # inherits all of the settings from Ambientfile
|
57
52
|
|
58
53
|
target "Monies" do
|
@@ -61,14 +56,15 @@ target "Monies" do
|
|
61
56
|
end
|
62
57
|
```
|
63
58
|
|
64
|
-
Just run `ambient [filename]` (e.g. `ambient Ambientfile-enterprise`)
|
65
59
|
|
66
60
|
Notes
|
67
61
|
=====
|
68
62
|
|
63
|
+
- The [example Ambientfile](https://github.com/Dan2552/ambient-xcode/blob/master/example/Ambientfile) or [example Ambientfile-objc](https://github.com/Dan2552/ambient-xcode/blob/master/example/Ambientfile-objc) matches the exact settings of a new iOS project.
|
69
64
|
- Use the `use_defaults_for_everything_not_specified_in_this_file!` setting to ensure your project file is clean. Warning though: this setting will clear all your targets' settings, so be sure to define absolutely every setting in the `Ambientfile` if you want to use this.
|
70
65
|
- When defining settings directly within a target, the setting is set to each scheme.
|
71
|
-
|
66
|
+
- The name of the constants used for `option` is located in the **Quick Help** section in Xcode
|
67
|
+

|
72
68
|
|
73
69
|
Possible future features
|
74
70
|
========================
|
@@ -77,6 +73,4 @@ Possible future features
|
|
77
73
|
- Helper method to change build phases to default
|
78
74
|
- Version number + build number
|
79
75
|
- Provisioning profiles from searching by name rather than storing a uuid (so it actually works across teams)
|
80
|
-
- `Info.plist` definitions
|
81
|
-
- ?
|
82
76
|
- Ability to not have to commit `*.xcodeproj` into version control (maybe too far?)
|
data/ambient-xcode.gemspec
CHANGED
@@ -3,8 +3,8 @@ $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.
|
7
|
-
gem.authors = ['Daniel
|
6
|
+
gem.version = '0.6.0'
|
7
|
+
gem.authors = ['Daniel Inkpen']
|
8
8
|
gem.email = ['dan2552@gmail.com']
|
9
9
|
gem.description = %q{CLI for configuring Xcode projects from a Ruby file.}
|
10
10
|
gem.summary = %q{Define your envrionment settings all in one easy to read Ruby file, and re-apply it to your Xcode project to ensure settings are correct.}
|
@@ -12,6 +12,7 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.license = 'MIT'
|
13
13
|
|
14
14
|
gem.add_dependency 'xcodeproj', '~> 1.1.0'
|
15
|
+
gem.add_dependency 'plist', '~> 3.2.0'
|
15
16
|
|
16
17
|
gem.files = `git ls-files`.split($/)
|
17
18
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
data/example/Ambientfile
CHANGED
@@ -1,63 +1,7 @@
|
|
1
|
-
PROJECT = "
|
1
|
+
PROJECT = "EmptyProject"
|
2
2
|
PREFIX = "uk.danielgreen."
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
option "CLANG_CXX_LANGUAGE_STANDARD", "gnu++0x"
|
9
|
-
option "CLANG_CXX_LIBRARY", "libc++"
|
10
|
-
option "CLANG_ENABLE_MODULES", true
|
11
|
-
option "CLANG_ENABLE_OBJC_ARC", true
|
12
|
-
|
13
|
-
option "CODE_SIGN_IDENTITY[sdk=iphoneos*]", "iPhone Developer"
|
14
|
-
option "COPY_PHASE_STRIP", false
|
15
|
-
|
16
|
-
option "ENABLE_STRICT_OBJC_MSGSEND", true
|
17
|
-
option "GCC_C_LANGUAGE_STANDARD", "gnu99"
|
18
|
-
option "GCC_NO_COMMON_BLOCKS", true
|
19
|
-
option "SDKROOT", "iphoneos"
|
20
|
-
option "IPHONEOS_DEPLOYMENT_TARGET", "9.0"
|
21
|
-
|
22
|
-
scheme "Debug" do
|
23
|
-
option "DEBUG_INFORMATION_FORMAT", "dwarf"
|
24
|
-
option "ENABLE_TESTABILITY", true
|
25
|
-
option "MTL_ENABLE_DEBUG_INFO", true
|
26
|
-
option "ONLY_ACTIVE_ARCH", true
|
27
|
-
option "GCC_DYNAMIC_NO_PIC", false
|
28
|
-
option "GCC_OPTIMIZATION_LEVEL", "0"
|
29
|
-
option "GCC_PREPROCESSOR_DEFINITIONS", ["DEBUG=1", "$(inherited)"]
|
30
|
-
end
|
31
|
-
|
32
|
-
scheme "Release" do
|
33
|
-
option "DEBUG_INFORMATION_FORMAT", "dwarf-with-dsym"
|
34
|
-
option "ENABLE_NS_ASSERTIONS", false
|
35
|
-
option "MTL_ENABLE_DEBUG_INFO", false
|
36
|
-
option "VALIDATE_PRODUCT", true
|
37
|
-
end
|
38
|
-
|
39
|
-
target "#{PROJECT}" do
|
40
|
-
option "INFOPLIST_FILE", "#{PROJECT}/Info.plist"
|
41
|
-
option "PRODUCT_BUNDLE_IDENTIFIER", "#{PREFIX}#{PROJECT}"
|
42
|
-
option "ASSETCATALOG_COMPILER_APPICON_NAME", "AppIcon"
|
43
|
-
option "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks"
|
44
|
-
option "PRODUCT_NAME", "$(TARGET_NAME)"
|
45
|
-
end
|
46
|
-
|
47
|
-
target "#{PROJECT}Tests" do
|
48
|
-
option "INFOPLIST_FILE", "#{PROJECT}Tests/Info.plist"
|
49
|
-
option "BUNDLE_LOADER", "$(TEST_HOST)"
|
50
|
-
option "TEST_HOST", "$(BUILT_PRODUCTS_DIR)/#{PROJECT}.app/#{PROJECT}"
|
51
|
-
option "PRODUCT_BUNDLE_IDENTIFIER", "#{PREFIX}#{PROJECT}Tests"
|
52
|
-
option "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"
|
53
|
-
option "PRODUCT_NAME", "$(TARGET_NAME)"
|
54
|
-
end
|
55
|
-
|
56
|
-
target "#{PROJECT}UITests" do
|
57
|
-
option "INFOPLIST_FILE", "#{PROJECT}UITests/Info.plist"
|
58
|
-
option "TEST_TARGET_NAME", "#{PROJECT}"
|
59
|
-
option "PRODUCT_BUNDLE_IDENTIFIER", "#{PREFIX}#{PROJECT}UITests"
|
60
|
-
option "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"
|
61
|
-
option "USES_XCTRUNNER", "YES"
|
62
|
-
option "PRODUCT_NAME", "$(TARGET_NAME)"
|
63
|
-
end
|
4
|
+
base_ios_settings! PROJECT,
|
5
|
+
prefix: PREFIX,
|
6
|
+
tests: true,
|
7
|
+
ui_tests: true
|
data/lib/ambient.rb
CHANGED
@@ -8,6 +8,7 @@ end
|
|
8
8
|
|
9
9
|
require_relative 'project_helper'
|
10
10
|
require_relative 'capabilities_helper'
|
11
|
+
require_relative 'plist_helper'
|
11
12
|
require_relative 'dsl'
|
12
13
|
|
13
14
|
module Ambient
|
@@ -151,7 +152,7 @@ module Ambient
|
|
151
152
|
end
|
152
153
|
|
153
154
|
def run_ambientfile(filename)
|
154
|
-
puts "Reading settings from #{filename}"
|
155
|
+
puts "# Reading settings from #{filename}"
|
155
156
|
ambient = File.join(Dir.pwd, filename)
|
156
157
|
raise "#{filename} not found in current directory." unless File.exists?(ambient)
|
157
158
|
load ambient
|
data/lib/dsl.rb
CHANGED
@@ -6,6 +6,80 @@ def option(name, value)
|
|
6
6
|
Ambient.configure { set_option(name, value) }
|
7
7
|
end
|
8
8
|
|
9
|
+
def base_ios_settings!(project_name, prefix: "", tests: false, ui_tests: false, swift: true, target: nil, test_target: nil, ui_test_target: nil)
|
10
|
+
use_defaults_for_everything_not_specified_in_this_file!
|
11
|
+
enable_default_warnings!
|
12
|
+
|
13
|
+
target ||= "project_name"
|
14
|
+
test_target ||= "#{project_name}Tests"
|
15
|
+
ui_test_target ||= "#{project_name}UITests"
|
16
|
+
tests = true if test_target
|
17
|
+
ui_tests = true if ui_test_target
|
18
|
+
|
19
|
+
option "ALWAYS_SEARCH_USER_PATHS", false
|
20
|
+
option "CLANG_CXX_LANGUAGE_STANDARD", "gnu++0x"
|
21
|
+
option "CLANG_CXX_LIBRARY", "libc++"
|
22
|
+
option "CLANG_ENABLE_MODULES", true
|
23
|
+
option "CLANG_ENABLE_OBJC_ARC", true
|
24
|
+
|
25
|
+
option "CODE_SIGN_IDENTITY[sdk=iphoneos*]", "iPhone Developer"
|
26
|
+
option "COPY_PHASE_STRIP", false
|
27
|
+
|
28
|
+
option "ENABLE_STRICT_OBJC_MSGSEND", true
|
29
|
+
option "GCC_C_LANGUAGE_STANDARD", "gnu99"
|
30
|
+
option "GCC_NO_COMMON_BLOCKS", true
|
31
|
+
option "SDKROOT", "iphoneos"
|
32
|
+
option "IPHONEOS_DEPLOYMENT_TARGET", "9.0"
|
33
|
+
|
34
|
+
scheme "Debug" do
|
35
|
+
option "DEBUG_INFORMATION_FORMAT", "dwarf"
|
36
|
+
option "ENABLE_TESTABILITY", true
|
37
|
+
option "MTL_ENABLE_DEBUG_INFO", true
|
38
|
+
option "ONLY_ACTIVE_ARCH", true
|
39
|
+
option "GCC_DYNAMIC_NO_PIC", false
|
40
|
+
option "GCC_OPTIMIZATION_LEVEL", "0"
|
41
|
+
option "GCC_PREPROCESSOR_DEFINITIONS", ["DEBUG=1", "$(inherited)"]
|
42
|
+
option "SWIFT_OPTIMIZATION_LEVEL", "-Onone" if swift
|
43
|
+
end
|
44
|
+
|
45
|
+
scheme "Release" do
|
46
|
+
option "DEBUG_INFORMATION_FORMAT", "dwarf-with-dsym"
|
47
|
+
option "ENABLE_NS_ASSERTIONS", false
|
48
|
+
option "MTL_ENABLE_DEBUG_INFO", false
|
49
|
+
option "VALIDATE_PRODUCT", true
|
50
|
+
end
|
51
|
+
|
52
|
+
target project_name do
|
53
|
+
option "INFOPLIST_FILE", "#{project_name}/Info.plist"
|
54
|
+
option "PRODUCT_BUNDLE_IDENTIFIER", "#{prefix}#{project_name}"
|
55
|
+
option "ASSETCATALOG_COMPILER_APPICON_NAME", "AppIcon"
|
56
|
+
option "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks"
|
57
|
+
option "PRODUCT_NAME", "$(TARGET_NAME)"
|
58
|
+
end
|
59
|
+
|
60
|
+
if tests
|
61
|
+
target test_target do
|
62
|
+
option "INFOPLIST_FILE", "#{project_name}Tests/Info.plist"
|
63
|
+
option "BUNDLE_LOADER", "$(TEST_HOST)"
|
64
|
+
option "TEST_HOST", "$(BUILT_PRODUCTS_DIR)/#{project_name}.app/#{project_name}"
|
65
|
+
option "PRODUCT_BUNDLE_IDENTIFIER", "#{prefix}#{project_name}Tests"
|
66
|
+
option "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"
|
67
|
+
option "PRODUCT_NAME", "$(TARGET_NAME)"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
if ui_tests
|
72
|
+
target ui_test_target do
|
73
|
+
option "INFOPLIST_FILE", "#{project_name}UITests/Info.plist"
|
74
|
+
option "TEST_TARGET_NAME", "#{project_name}"
|
75
|
+
option "PRODUCT_BUNDLE_IDENTIFIER", "#{prefix}#{project_name}UITests"
|
76
|
+
option "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"
|
77
|
+
option "USES_XCTRUNNER", "YES"
|
78
|
+
option "PRODUCT_NAME", "$(TARGET_NAME)"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
9
83
|
def enable_extra_warnings_and_static_analyser!
|
10
84
|
warnings = %w(GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED
|
11
85
|
GCC_WARN_MISSING_PARENTHESES
|
@@ -69,6 +143,26 @@ def scheme(name, parent: nil, &block)
|
|
69
143
|
SchemeScope.new(nil, name, parent).configure(&block)
|
70
144
|
end
|
71
145
|
|
146
|
+
def plist(path, &block)
|
147
|
+
PlistScope.new(path).configure(&block)
|
148
|
+
end
|
149
|
+
|
150
|
+
class PlistScope
|
151
|
+
attr_reader :helper
|
152
|
+
|
153
|
+
def initialize(path)
|
154
|
+
@helper = PlistHelper.new(path)
|
155
|
+
end
|
156
|
+
|
157
|
+
def configure(&block)
|
158
|
+
instance_eval(&block)
|
159
|
+
end
|
160
|
+
|
161
|
+
def entry(key, value)
|
162
|
+
helper.add_entry(key, value)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
72
166
|
class TargetScope
|
73
167
|
attr_reader :name
|
74
168
|
|
data/lib/plist_helper.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'plist'
|
2
|
+
|
3
|
+
class PlistHelper
|
4
|
+
attr_reader :path
|
5
|
+
|
6
|
+
def initialize(path)
|
7
|
+
@path = path
|
8
|
+
end
|
9
|
+
|
10
|
+
def add_entry(key, value)
|
11
|
+
plist_as_dictionary[key] = value
|
12
|
+
puts "applying to plist: #{path} #{key}"
|
13
|
+
save
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def plist_as_dictionary
|
19
|
+
@plist_as_dictionary ||= Plist::parse_xml(path)
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_plist
|
23
|
+
plist_as_dictionary.to_plist
|
24
|
+
end
|
25
|
+
|
26
|
+
def save
|
27
|
+
File.open(path, 'w') { |file| file.write(to_plist) }
|
28
|
+
end
|
29
|
+
end
|
data/lib/project_helper.rb
CHANGED
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.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Daniel
|
7
|
+
- Daniel Inkpen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: xcodeproj
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.1.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: plist
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.2.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.2.0
|
27
41
|
description: CLI for configuring Xcode projects from a Ruby file.
|
28
42
|
email:
|
29
43
|
- dan2552@gmail.com
|
@@ -36,11 +50,13 @@ files:
|
|
36
50
|
- ambient-xcode.gemspec
|
37
51
|
- bin/ambient
|
38
52
|
- example/Ambientfile
|
39
|
-
- example/Ambientfile-
|
53
|
+
- example/Ambientfile-objc
|
54
|
+
- example/Ambientfile-verbose
|
40
55
|
- example/images/Constant.png
|
41
56
|
- lib/ambient.rb
|
42
57
|
- lib/capabilities_helper.rb
|
43
58
|
- lib/dsl.rb
|
59
|
+
- lib/plist_helper.rb
|
44
60
|
- lib/project_helper.rb
|
45
61
|
homepage: https://github.com/Dan2552/ambient
|
46
62
|
licenses:
|