xcodeproj 0.28.2 → 1.0.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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/lib/xcodeproj/command/config_dump.rb +2 -1
  3. data/lib/xcodeproj/config/other_linker_flags_parser.rb +5 -2
  4. data/lib/xcodeproj/config.rb +14 -5
  5. data/lib/xcodeproj/constants.rb +62 -27
  6. data/lib/xcodeproj/differ.rb +7 -7
  7. data/lib/xcodeproj/gem_version.rb +1 -1
  8. data/lib/xcodeproj/plist/ffi/core_foundation.rb +441 -0
  9. data/lib/xcodeproj/plist/ffi/dev_tools_core.rb +188 -0
  10. data/lib/xcodeproj/plist/ffi.rb +119 -0
  11. data/lib/xcodeproj/plist/plist_gem.rb +27 -0
  12. data/lib/xcodeproj/plist.rb +89 -0
  13. data/lib/xcodeproj/project/object/build_configuration.rb +15 -0
  14. data/lib/xcodeproj/project/object/build_rule.rb +28 -0
  15. data/lib/xcodeproj/project/object/group.rb +28 -0
  16. data/lib/xcodeproj/project/object/helpers/file_references_factory.rb +1 -1
  17. data/lib/xcodeproj/project/object/native_target.rb +26 -7
  18. data/lib/xcodeproj/project/object.rb +16 -3
  19. data/lib/xcodeproj/project/object_attributes.rb +10 -0
  20. data/lib/xcodeproj/project/object_dictionary.rb +2 -0
  21. data/lib/xcodeproj/project/object_list.rb +16 -4
  22. data/lib/xcodeproj/project/project_helper.rb +1 -1
  23. data/lib/xcodeproj/project/uuid_generator.rb +1 -0
  24. data/lib/xcodeproj/project.rb +36 -12
  25. data/lib/xcodeproj/scheme/build_action.rb +5 -2
  26. data/lib/xcodeproj/scheme/environment_variables.rb +170 -0
  27. data/lib/xcodeproj/scheme/launch_action.rb +16 -0
  28. data/lib/xcodeproj/scheme/test_action.rb +18 -0
  29. data/lib/xcodeproj/scheme.rb +5 -5
  30. data/lib/xcodeproj/workspace/file_reference.rb +2 -3
  31. data/lib/xcodeproj/workspace/group_reference.rb +64 -0
  32. data/lib/xcodeproj/workspace.rb +127 -34
  33. data/lib/xcodeproj.rb +1 -1
  34. metadata +29 -17
  35. data/lib/xcodeproj/plist_helper.rb +0 -758
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eae456c17889ae1b3dc65acb3e95122776f584f5
4
- data.tar.gz: 30e4ee588cfccff194ad57520a64737e2bf7434e
3
+ metadata.gz: 4661a83a53151976f7e363d73feda6f24df578e0
4
+ data.tar.gz: c9a08f7dca14cd343e14ab4bfbb0e2f46bbf89fd
5
5
  SHA512:
6
- metadata.gz: e149c929d82e0593c8accbbdedd4bb6a23405b976aefcfb551d50381aada69b8b39725240ff4c34f99918c3aaa57c178cc939dae69537eb04516e1cb0ea5d3d9
7
- data.tar.gz: 82e272ca562aae5487bd0ef985e411f1576a55b1e6056a3dd6b4434e88f5700632e236e06b98acad5d6af8acc8c292e3bca7d1c5a756a24a06bf79910e1934be
6
+ metadata.gz: 45849f18963cedccdb3d56284f9f7b9ae4eb671750dce2acb138b3760072afdd116b293953b0a476b521df35a24e074c56d52a0b942425a384619b0aefdea6b5
7
+ data.tar.gz: 0c32c169f15589f51712eec8ae8bf7f95f62781ba3e31eb20e38593768e89ed9d4ada6ecaec33d00be49b2224765710565af3517a509e21c385286a6f4eda850
@@ -19,11 +19,12 @@ module Xcodeproj
19
19
 
20
20
  self.arguments = [
21
21
  CLAide::Argument.new('PROJECT', false),
22
+ CLAide::Argument.new('OUTPUT', false),
22
23
  ]
23
24
 
24
25
  def initialize(argv)
25
26
  self.xcodeproj_path = argv.shift_argument
26
- @output_path = Pathname(argv.shift_argument || '.')
27
+ @output_path = Pathname(argv.shift_argument || '.')
27
28
 
28
29
  super
29
30
  end
@@ -8,7 +8,7 @@ module Xcodeproj
8
8
  # @return [Hash{Symbol, Array[String]}] Splits the given
9
9
  # other linker flags value by type.
10
10
  #
11
- # @param [String] flags
11
+ # @param [String, Array] flags
12
12
  # The other linker flags value.
13
13
  #
14
14
  def self.parse(flags)
@@ -21,7 +21,10 @@ module Xcodeproj
21
21
  }
22
22
 
23
23
  key = nil
24
- split(flags).each do |token|
24
+ if flags.is_a? String
25
+ flags = split(flags)
26
+ end
27
+ flags.each do |token|
25
28
  case token
26
29
  when '-framework'
27
30
  key = :frameworks
@@ -82,7 +82,7 @@ module Xcodeproj
82
82
  def to_s(prefix = nil)
83
83
  include_lines = includes.map { |path| "#include \"#{normalized_xcconfig_path(path)}\"" }
84
84
  settings = to_hash(prefix).sort_by(&:first).map { |k, v| "#{k} = #{v}".strip }
85
- [include_lines + settings].join("\n")
85
+ (include_lines + settings).join("\n") << "\n"
86
86
  end
87
87
 
88
88
  # Writes the serialized representation of the internal data to the given
@@ -275,9 +275,17 @@ module Xcodeproj
275
275
  #
276
276
  def merge_attributes!(attributes)
277
277
  @attributes.merge!(attributes) do |_, v1, v2|
278
- v1, v2 = v1.strip, v2.strip
279
- existing = v1.strip.shellsplit
280
- existing.include?(v2) ? v1 : "#{v1} #{v2}"
278
+ v1 = v1.strip
279
+ v2 = v2.strip
280
+ v1_split = v1.shellsplit
281
+ v2_split = v2.shellsplit
282
+ if (v2_split - v1_split).empty? || v1_split.first(v2_split.size) == v2_split
283
+ v1
284
+ elsif v2_split.first(v1_split.size) == v1_split
285
+ v2
286
+ else
287
+ "#{v1} #{v2}"
288
+ end
281
289
  end
282
290
  end
283
291
 
@@ -317,7 +325,8 @@ module Xcodeproj
317
325
  def extract_key_value(line)
318
326
  match = line.match(KEY_VALUE_PATTERN)
319
327
  if match
320
- key, value = match[1], match[2]
328
+ key = match[1]
329
+ value = match[2]
321
330
  [key.strip, value.strip]
322
331
  else
323
332
  []
@@ -4,17 +4,17 @@ module Xcodeproj
4
4
  module Constants
5
5
  # @return [String] The last known iOS SDK (stable).
6
6
  #
7
- LAST_KNOWN_IOS_SDK = '9.0'
7
+ LAST_KNOWN_IOS_SDK = '9.3'
8
8
 
9
9
  # @return [String] The last known OS X SDK (stable).
10
10
  #
11
- LAST_KNOWN_OSX_SDK = '10.11'
11
+ LAST_KNOWN_OSX_SDK = '10.11'
12
12
 
13
- # @return [String] The last known tvOS SDK (unstable).
14
- LAST_KNOWN_TVOS_SDK = '9.0'
13
+ # @return [String] The last known tvOS SDK (stable).
14
+ LAST_KNOWN_TVOS_SDK = '9.2'
15
15
 
16
- # @return [String] The last known watchOS SDK.
17
- LAST_KNOWN_WATCHOS_SDK = '2.0'
16
+ # @return [String] The last known watchOS SDK (stable).
17
+ LAST_KNOWN_WATCHOS_SDK = '2.2'
18
18
 
19
19
  # @return [String] The last known archive version to Xcodeproj.
20
20
  #
@@ -25,15 +25,15 @@ module Xcodeproj
25
25
 
26
26
  # @return [String] The last known object version to Xcodeproj.
27
27
  #
28
- LAST_KNOWN_OBJECT_VERSION = 47
28
+ LAST_KNOWN_OBJECT_VERSION = 47
29
29
 
30
30
  # @return [String] The last known object version to Xcodeproj.
31
31
  #
32
- LAST_UPGRADE_CHECK = '0700'
32
+ LAST_UPGRADE_CHECK = '0700'
33
33
 
34
34
  # @return [String] The last known object version to Xcodeproj.
35
35
  #
36
- LAST_SWIFT_UPGRADE_CHECK = '0700'
36
+ LAST_SWIFT_UPGRADE_CHECK = '0730'
37
37
 
38
38
  # @return [String] The version of `.xcscheme` files supported by Xcodeproj
39
39
  #
@@ -113,12 +113,14 @@ module Xcodeproj
113
113
  :bundle => 'com.apple.product-type.bundle',
114
114
  :octest_bundle => 'com.apple.product-type.bundle',
115
115
  :unit_test_bundle => 'com.apple.product-type.bundle.unit-test',
116
+ :ui_test_bundle => 'com.apple.product-type.bundle.ui-testing',
116
117
  :app_extension => 'com.apple.product-type.app-extension',
117
118
  :command_line_tool => 'com.apple.product-type.tool',
118
119
  :watch_app => 'com.apple.product-type.application.watchapp',
119
120
  :watch2_app => 'com.apple.product-type.application.watchapp2',
120
121
  :watch_extension => 'com.apple.product-type.watchkit-extension',
121
122
  :watch2_extension => 'com.apple.product-type.watchkit2-extension',
123
+ :tv_extension => 'com.apple.product-type.tv-app-extension',
122
124
  }.freeze
123
125
 
124
126
  # @return [Hash] The extensions or the various product UTIs.
@@ -138,13 +140,16 @@ module Xcodeproj
138
140
  #
139
141
  COMMON_BUILD_SETTINGS = {
140
142
  :all => {
141
- 'PRODUCT_NAME' => '$(TARGET_NAME)',
142
143
  'ENABLE_STRICT_OBJC_MSGSEND' => 'YES',
144
+ 'GCC_NO_COMMON_BLOCKS' => 'YES',
145
+ 'PRODUCT_NAME' => '$(TARGET_NAME)',
143
146
  }.freeze,
144
147
  [:debug] => {
148
+ 'DEBUG_INFORMATION_FORMAT' => 'dwarf',
145
149
  'MTL_ENABLE_DEBUG_INFO' => 'YES',
146
150
  }.freeze,
147
151
  [:release] => {
152
+ 'DEBUG_INFORMATION_FORMAT' => 'dwarf-with-dsym',
148
153
  'MTL_ENABLE_DEBUG_INFO' => 'NO',
149
154
  }.freeze,
150
155
  [:ios] => {
@@ -163,23 +168,18 @@ module Xcodeproj
163
168
  # Empty?
164
169
  }.freeze,
165
170
  [:release, :osx] => {
166
- 'DEBUG_INFORMATION_FORMAT' => 'dwarf-with-dsym',
171
+ # Empty?
167
172
  }.freeze,
168
173
  [:debug, :ios] => {
169
174
  # Empty?
170
175
  }.freeze,
171
176
  [:debug, :application, :swift] => {
172
177
  'SWIFT_OPTIMIZATION_LEVEL' => '-Onone',
173
- 'ENABLE_TESTABILITY' => 'YES',
174
178
  }.freeze,
175
- [:debug, :dynamic_library, :swift] => {
176
- 'ENABLE_TESTABILITY' => 'YES',
177
- }.freeze,
178
- [:debug, :framework, :swift] => {
179
- 'ENABLE_TESTABILITY' => 'YES',
179
+ [:debug, :swift] => {
180
+ 'SWIFT_OPTIMIZATION_LEVEL' => '-Onone',
180
181
  }.freeze,
181
182
  [:debug, :static_library, :swift] => {
182
- 'ENABLE_TESTABILITY' => 'YES',
183
183
  }.freeze,
184
184
  [:framework] => {
185
185
  'VERSION_INFO_PREFIX' => '',
@@ -200,25 +200,43 @@ module Xcodeproj
200
200
  [:osx, :framework] => {
201
201
  'LD_RUNPATH_SEARCH_PATHS' => ['$(inherited)', '@executable_path/../Frameworks', '@loader_path/Frameworks'],
202
202
  'FRAMEWORK_VERSION' => 'A',
203
+ 'CODE_SIGN_IDENTITY' => '-',
203
204
  'COMBINE_HIDPI_IMAGES' => 'YES',
204
205
  }.freeze,
206
+ [:watchos, :framework] => {
207
+ 'APPLICATION_EXTENSION_API_ONLY' => 'YES',
208
+ 'LD_RUNPATH_SEARCH_PATHS' => ['$(inherited)', '@executable_path/Frameworks', '@loader_path/Frameworks'],
209
+ 'TARGETED_DEVICE_FAMILY' => '4',
210
+ }.freeze,
211
+ [:tvos, :framework] => {
212
+ 'LD_RUNPATH_SEARCH_PATHS' => ['$(inherited)', '@executable_path/Frameworks', '@loader_path/Frameworks'],
213
+ 'TARGETED_DEVICE_FAMILY' => '3',
214
+ }.freeze,
205
215
  [:framework, :swift] => {
206
216
  'DEFINES_MODULE' => 'YES',
207
217
  }.freeze,
208
- [:debug, :framework, :swift] => {
209
- 'SWIFT_OPTIMIZATION_LEVEL' => '-Onone',
210
- }.freeze,
211
218
  [:osx, :static_library] => {
219
+ 'CODE_SIGN_IDENTITY' => '-',
212
220
  'EXECUTABLE_PREFIX' => 'lib',
213
221
  }.freeze,
214
222
  [:ios, :static_library] => {
223
+ 'CODE_SIGN_IDENTITY[sdk=iphoneos*]' => 'iPhone Developer',
224
+ 'OTHER_LDFLAGS' => '-ObjC',
225
+ 'SKIP_INSTALL' => 'YES',
226
+ }.freeze,
227
+ [:watchos, :static_library] => {
228
+ 'OTHER_LDFLAGS' => '-ObjC',
229
+ 'SKIP_INSTALL' => 'YES',
230
+ }.freeze,
231
+ [:tvos, :static_library] => {
215
232
  'OTHER_LDFLAGS' => '-ObjC',
216
233
  'SKIP_INSTALL' => 'YES',
217
234
  }.freeze,
218
235
  [:osx, :dynamic_library] => {
219
- 'EXECUTABLE_PREFIX' => 'lib',
236
+ 'CODE_SIGN_IDENTITY' => '-',
220
237
  'DYLIB_COMPATIBILITY_VERSION' => '1',
221
238
  'DYLIB_CURRENT_VERSION' => '1',
239
+ 'EXECUTABLE_PREFIX' => 'lib',
222
240
  }.freeze,
223
241
  [:application] => {
224
242
  'ASSETCATALOG_COMPILER_APPICON_NAME' => 'AppIcon',
@@ -226,12 +244,26 @@ module Xcodeproj
226
244
  [:ios, :application] => {
227
245
  'CODE_SIGN_IDENTITY[sdk=iphoneos*]' => 'iPhone Developer',
228
246
  'LD_RUNPATH_SEARCH_PATHS' => ['$(inherited)', '@executable_path/Frameworks'],
247
+ 'TARGETED_DEVICE_FAMILY' => '1,2',
229
248
  }.freeze,
230
249
  [:osx, :application] => {
231
250
  'COMBINE_HIDPI_IMAGES' => 'YES',
232
251
  'CODE_SIGN_IDENTITY' => '-',
233
252
  'LD_RUNPATH_SEARCH_PATHS' => ['$(inherited)', '@executable_path/../Frameworks'],
234
253
  }.freeze,
254
+ [:watchos, :application] => {
255
+ 'SKIP_INSTALL' => 'YES',
256
+ 'TARGETED_DEVICE_FAMILY' => '4',
257
+ }.freeze,
258
+ [:watchos, :application, :swift] => {
259
+ 'EMBEDDED_CONTENT_CONTAINS_SWIFT' => 'YES',
260
+ }.freeze,
261
+ [:tvos, :application] => {
262
+ 'ASSETCATALOG_COMPILER_APPICON_NAME' => 'App Icon & Top Shelf Image',
263
+ 'ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME' => 'LaunchImage',
264
+ 'TARGETED_DEVICE_FAMILY' => '3',
265
+ 'LD_RUNPATH_SEARCH_PATHS' => ['$(inherited)', '@executable_path/Frameworks'],
266
+ }.freeze,
235
267
  [:bundle] => {
236
268
  'PRODUCT_NAME' => '$(TARGET_NAME)',
237
269
  'WRAPPER_EXTENSION' => 'bundle',
@@ -241,9 +273,10 @@ module Xcodeproj
241
273
  'SDKROOT' => 'iphoneos',
242
274
  }.freeze,
243
275
  [:osx, :bundle] => {
276
+ 'CODE_SIGN_IDENTITY' => '-',
244
277
  'COMBINE_HIDPI_IMAGES' => 'YES',
245
- 'SDKROOT' => 'macosx',
246
278
  'INSTALL_PATH' => '$(LOCAL_LIBRARY_DIR)/Bundles',
279
+ 'SDKROOT' => 'macosx',
247
280
  }.freeze,
248
281
  }.freeze
249
282
 
@@ -252,19 +285,20 @@ module Xcodeproj
252
285
  PROJECT_DEFAULT_BUILD_SETTINGS = {
253
286
  :all => {
254
287
  'ALWAYS_SEARCH_USER_PATHS' => 'NO',
288
+ 'CLANG_ANALYZER_NONNULL' => 'YES',
255
289
  'CLANG_CXX_LANGUAGE_STANDARD' => 'gnu++0x',
256
290
  'CLANG_CXX_LIBRARY' => 'libc++',
291
+ 'CLANG_ENABLE_MODULES' => 'YES',
257
292
  'CLANG_ENABLE_OBJC_ARC' => 'YES',
293
+ 'CLANG_WARN__DUPLICATE_METHOD_MATCH' => 'YES',
258
294
  'CLANG_WARN_BOOL_CONVERSION' => 'YES',
259
295
  'CLANG_WARN_CONSTANT_CONVERSION' => 'YES',
260
296
  'CLANG_WARN_DIRECT_OBJC_ISA_USAGE' => 'YES',
261
- 'CLANG_WARN__DUPLICATE_METHOD_MATCH' => 'YES',
262
297
  'CLANG_WARN_EMPTY_BODY' => 'YES',
263
298
  'CLANG_WARN_ENUM_CONVERSION' => 'YES',
264
299
  'CLANG_WARN_INT_CONVERSION' => 'YES',
265
300
  'CLANG_WARN_OBJC_ROOT_CLASS' => 'YES',
266
301
  'CLANG_WARN_UNREACHABLE_CODE' => 'YES',
267
- 'CLANG_ENABLE_MODULES' => 'YES',
268
302
  'GCC_C_LANGUAGE_STANDARD' => 'gnu99',
269
303
  'GCC_WARN_64_TO_32_BIT_CONVERSION' => 'YES',
270
304
  'GCC_WARN_ABOUT_RETURN_TYPE' => 'YES',
@@ -279,12 +313,13 @@ module Xcodeproj
279
313
  'VALIDATE_PRODUCT' => 'YES',
280
314
  }.freeze,
281
315
  :debug => {
282
- 'ONLY_ACTIVE_ARCH' => 'YES',
283
316
  'COPY_PHASE_STRIP' => 'NO',
317
+ 'ENABLE_TESTABILITY' => 'YES',
284
318
  'GCC_DYNAMIC_NO_PIC' => 'NO',
285
319
  'GCC_OPTIMIZATION_LEVEL' => '0',
286
320
  'GCC_PREPROCESSOR_DEFINITIONS' => ['DEBUG=1', '$(inherited)'],
287
321
  'GCC_SYMBOLS_PRIVATE_EXTERN' => 'NO',
322
+ 'ONLY_ACTIVE_ARCH' => 'YES',
288
323
  }.freeze,
289
324
  }.freeze
290
325
 
@@ -313,6 +348,6 @@ module Xcodeproj
313
348
 
314
349
  # @return [Array] The extensions which are associated with header files.
315
350
  #
316
- HEADER_FILES_EXTENSIONS = %w(.h .hh .hpp .ipp .tpp).freeze
351
+ HEADER_FILES_EXTENSIONS = %w(.h .hh .hpp .ipp .tpp .hxx .def).freeze
317
352
  end
318
353
  end
@@ -43,19 +43,19 @@ module Xcodeproj
43
43
  # @return [Nil] if the given values are equal.
44
44
  #
45
45
  def self.diff(value_1, value_2, options = {})
46
- options[:key_1] ||= 'value_1'
47
- options[:key_2] ||= 'value_2'
46
+ options[:key_1] ||= 'value_1'
47
+ options[:key_2] ||= 'value_2'
48
48
  options[:id_key] ||= nil
49
49
 
50
- if value_1.class == value_2.class
51
- method = case value_1
50
+ method = if value_1.class == value_2.class
51
+ case value_1
52
52
  when Hash then :hash_diff
53
53
  when Array then :array_diff
54
54
  else :generic_diff
55
55
  end
56
- else
57
- method = :generic_diff
58
- end
56
+ else
57
+ :generic_diff
58
+ end
59
59
  send(method, value_1, value_2, options)
60
60
  end
61
61
 
@@ -1,5 +1,5 @@
1
1
  module Xcodeproj
2
2
  # The version of the xcodeproj gem.
3
3
  #
4
- VERSION = '0.28.2' unless defined? Xcodeproj::VERSION
4
+ VERSION = '1.0.0'.freeze unless defined? Xcodeproj::VERSION
5
5
  end