ambient-xcode 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +12 -5
- data/ambient-xcode.gemspec +1 -1
- data/example/Ambientfile +63 -0
- data/lib/ambient.rb +14 -2
- data/lib/dsl.rb +35 -5
- data/lib/project_helper.rb +11 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36a5027a9d319fa88b1bc45e45990b9553eca940
|
4
|
+
data.tar.gz: 2a9614d04af26567d4908708e4eb4d19bc4b34bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d135a916846179681e5c28399993ad398619cb461f13922eb780c9becc88fa4741eac04837c55fc1d23ea8e8c67b9c91d563d1901f7bbf379113dbf5fa7f532
|
7
|
+
data.tar.gz: a8cee9b724b86123e98238f41e69f71b838b8cf93ee03fdcf6985d1088e210b28341516a235586b4d2e3adbbfa15986742e4f013a5406d90c5c75a7409a9069b
|
data/README.md
CHANGED
@@ -8,9 +8,14 @@ An `xcconfig` file can be used in order to help abstract your settings away from
|
|
8
8
|
Installation
|
9
9
|
============
|
10
10
|
|
11
|
-
|
11
|
+
Simply run:
|
12
12
|
```
|
13
|
-
gem
|
13
|
+
gem install ambient-xcode
|
14
|
+
```
|
15
|
+
|
16
|
+
Or if you use Bundler, add the following to your `Gemfile`:
|
17
|
+
```
|
18
|
+
gem "ambient-xcode"
|
14
19
|
```
|
15
20
|
|
16
21
|
Usage
|
@@ -18,9 +23,9 @@ Usage
|
|
18
23
|
|
19
24
|
Create an `Ambientfile` defining your project in the same directory as your `*.xcodeproj` file.
|
20
25
|
|
21
|
-
Here's
|
26
|
+
Here's a sample of the `Ambientfile` structure:
|
22
27
|
```ruby
|
23
|
-
|
28
|
+
enable_default_warnings!
|
24
29
|
use_defaults_for_everything_not_specified_in_this_file!
|
25
30
|
|
26
31
|
option "IPHONEOS_DEPLOYMENT_TARGET", "7.0"
|
@@ -36,7 +41,9 @@ target "MyProject" do
|
|
36
41
|
end
|
37
42
|
```
|
38
43
|
|
39
|
-
|
44
|
+
Run `ambient` from the command line to write your settings into your project.
|
45
|
+
|
46
|
+
The [example Ambientfile](https://github.com/Dan2552/ambient-xcode/blob/master/example/Ambientfile) matches the exact settings of a new iOS project.
|
40
47
|
|
41
48
|
Notes
|
42
49
|
=====
|
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.2.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.}
|
data/example/Ambientfile
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
PROJECT = "MyProject"
|
2
|
+
PREFIX = "uk.danielgreen."
|
3
|
+
|
4
|
+
use_defaults_for_everything_not_specified_in_this_file!
|
5
|
+
enable_default_warnings!
|
6
|
+
|
7
|
+
option "ALWAYS_SEARCH_USER_PATHS", false
|
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
|
data/lib/ambient.rb
CHANGED
@@ -17,7 +17,9 @@ module Ambient
|
|
17
17
|
@project_options = {}
|
18
18
|
@shared_target_options = {}
|
19
19
|
@target_options = {}
|
20
|
+
@scheme_options = {}
|
20
21
|
@parents = {}
|
22
|
+
|
21
23
|
def configure(&block)
|
22
24
|
instance_eval &block
|
23
25
|
end
|
@@ -42,12 +44,16 @@ module Ambient
|
|
42
44
|
@target_options[target][scheme] ||= {}
|
43
45
|
@target_options[target][scheme][option] = value
|
44
46
|
else
|
45
|
-
# require 'pry'; binding.pry
|
46
47
|
@shared_target_options[target] ||= {}
|
47
48
|
@shared_target_options[target][option] = value
|
48
49
|
end
|
49
50
|
else
|
50
|
-
|
51
|
+
if scheme
|
52
|
+
@scheme_options[scheme] ||= {}
|
53
|
+
@scheme_options[scheme][option] = value
|
54
|
+
else
|
55
|
+
@project_options[option] = value
|
56
|
+
end
|
51
57
|
end
|
52
58
|
end
|
53
59
|
|
@@ -56,6 +62,7 @@ module Ambient
|
|
56
62
|
reset_project_to_defaults
|
57
63
|
reset_targets_to_defaults
|
58
64
|
process_project_options
|
65
|
+
process_scheme_options
|
59
66
|
process_shared_target_options
|
60
67
|
process_target_options
|
61
68
|
end
|
@@ -79,6 +86,11 @@ module Ambient
|
|
79
86
|
project_helper.process_project_options(@project_options)
|
80
87
|
end
|
81
88
|
|
89
|
+
def process_scheme_options
|
90
|
+
puts "applying ambient scheme settings"
|
91
|
+
project_helper.process_scheme_options(@scheme_options)
|
92
|
+
end
|
93
|
+
|
82
94
|
def process_shared_target_options
|
83
95
|
puts "applying ambient shared target settings"
|
84
96
|
project_helper.process_shared_target_options(@shared_target_options)
|
data/lib/dsl.rb
CHANGED
@@ -2,7 +2,7 @@ def option(name, value)
|
|
2
2
|
Ambient.configure { set_option(name, value) }
|
3
3
|
end
|
4
4
|
|
5
|
-
def
|
5
|
+
def enable_extra_warnings_and_static_analyser!
|
6
6
|
warnings = %w(GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED
|
7
7
|
GCC_WARN_MISSING_PARENTHESES
|
8
8
|
GCC_WARN_ABOUT_RETURN_TYPE
|
@@ -31,6 +31,28 @@ def enable_warnings_and_static_analyser!
|
|
31
31
|
warnings.each { |w| option(w, true) }
|
32
32
|
end
|
33
33
|
|
34
|
+
def enable_default_warnings!
|
35
|
+
truthy = %w(CLANG_WARN_BOOL_CONVERSION
|
36
|
+
CLANG_WARN_CONSTANT_CONVERSION
|
37
|
+
CLANG_WARN_EMPTY_BODY
|
38
|
+
CLANG_WARN_ENUM_CONVERSION
|
39
|
+
CLANG_WARN_INT_CONVERSION
|
40
|
+
CLANG_WARN_UNREACHABLE_CODE
|
41
|
+
CLANG_WARN__DUPLICATE_METHOD_MATCH
|
42
|
+
GCC_WARN_64_TO_32_BIT_CONVERSION
|
43
|
+
GCC_WARN_UNDECLARED_SELECTOR
|
44
|
+
GCC_WARN_UNUSED_FUNCTION
|
45
|
+
GCC_WARN_UNUSED_VARIABLE)
|
46
|
+
error = %w(CLANG_WARN_DIRECT_OBJC_ISA_USAGE
|
47
|
+
CLANG_WARN_OBJC_ROOT_CLASS
|
48
|
+
GCC_WARN_ABOUT_RETURN_TYPE)
|
49
|
+
aggressive = %w(GCC_WARN_UNINITIALIZED_AUTOS)
|
50
|
+
|
51
|
+
truthy.each { |w| option(w, true) }
|
52
|
+
error.each { |w| option(w, "YES_ERROR") }
|
53
|
+
aggressive.each { |w| option(w, "YES_AGGRESSIVE") }
|
54
|
+
end
|
55
|
+
|
34
56
|
def target(name, &block)
|
35
57
|
TargetScope.new(name).configure(&block)
|
36
58
|
end
|
@@ -39,6 +61,10 @@ def use_defaults_for_everything_not_specified_in_this_file!
|
|
39
61
|
Ambient.configure { @use_defaults = true }
|
40
62
|
end
|
41
63
|
|
64
|
+
def scheme(name, parent: nil, &block)
|
65
|
+
SchemeScope.new(nil, name, parent).configure(&block)
|
66
|
+
end
|
67
|
+
|
42
68
|
class TargetScope
|
43
69
|
attr_reader :name
|
44
70
|
|
@@ -67,7 +93,10 @@ class SchemeScope
|
|
67
93
|
@parent = parent
|
68
94
|
|
69
95
|
child = name
|
70
|
-
|
96
|
+
|
97
|
+
if @target
|
98
|
+
Ambient.configure { set_parent_target(target.name, child, parent) }
|
99
|
+
end
|
71
100
|
end
|
72
101
|
|
73
102
|
def configure(&block)
|
@@ -79,9 +108,10 @@ class SchemeScope
|
|
79
108
|
name = @name
|
80
109
|
parent = @parent
|
81
110
|
|
82
|
-
|
83
|
-
|
84
|
-
|
111
|
+
if target
|
112
|
+
Ambient.configure { set_option(option_name, value, target: target.name, scheme: name, parent: parent) }
|
113
|
+
else
|
114
|
+
Ambient.configure { set_option(option_name, value, scheme: name, parent: parent) }
|
85
115
|
end
|
86
116
|
end
|
87
117
|
end
|
data/lib/project_helper.rb
CHANGED
@@ -62,6 +62,17 @@ class ProjectHelper
|
|
62
62
|
save_changes
|
63
63
|
end
|
64
64
|
|
65
|
+
def process_scheme_options(options)
|
66
|
+
@project.build_configurations.each do |configuration|
|
67
|
+
scheme_options = options[configuration.to_s] || {}
|
68
|
+
scheme_options.each do |key, value|
|
69
|
+
configuration.build_settings[key] = value
|
70
|
+
configuration.build_settings.delete(key) if value == nil
|
71
|
+
end
|
72
|
+
end
|
73
|
+
save_changes
|
74
|
+
end
|
75
|
+
|
65
76
|
def print_info
|
66
77
|
puts "Targets:"
|
67
78
|
@project.targets.each { |t| puts "- #{t.to_s}" }
|
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.2.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-
|
11
|
+
date: 2015-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: xcodeproj
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- README.md
|
50
50
|
- ambient-xcode.gemspec
|
51
51
|
- bin/ambient
|
52
|
+
- example/Ambientfile
|
52
53
|
- lib/ambient.rb
|
53
54
|
- lib/dsl.rb
|
54
55
|
- lib/project_helper.rb
|