xcodeproj 1.25.0 → 1.26.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e7c20ca5a824ae24e92912281ba0fb550f5da31a7d0a578947db31f71698081d
4
- data.tar.gz: e24ba1fb83e6c6bede1a2b28af38eec0999c49a87f4008426ad8a3271e943358
3
+ metadata.gz: f923164140fdc1a72d881ad2eb4a2e918688b4ca227a27eb26bbd10eb30b4ab7
4
+ data.tar.gz: 27bd3ef47368f1294d72ee111fccb9783a1c034647e1775e789cd6aaeff06f6c
5
5
  SHA512:
6
- metadata.gz: 25f6136666d41ae86f7308ed9209f07c2f007bc92563072f0b13e749e1afbbb1e25f8ba9f47999637b92424d3170f9e1082cccff85a2784d388871b2382b73db
7
- data.tar.gz: fa0be9d69b8b56b5ce20422225ed159cf12c73ef919fbd0e2d92f9b4f1a80fbdcd04756238aa0533f1bb486928ccafe75ec707773b95aadac9657ff938e86d6c
6
+ metadata.gz: ce4c9f523e6efaf9a7190c3dc41d5c1f8374fba61dfd6eeb91c45b70d092159073af46cd8a7169df7d5f2f09a2aa40adc8b3271056d954ae9b54dd0cd17d9134
7
+ data.tar.gz: 0d4586e53b4dfe9356100fad57a96eb3b5ee36409abeb15f37f22ba7962a43289852c0abb9338ef48c71af09d04de48b0ad06f9098e1ad3e6440e213fd5f2d52
@@ -4,23 +4,23 @@ module Xcodeproj
4
4
  module Constants
5
5
  # @return [String] The last known iOS SDK (stable).
6
6
  #
7
- LAST_KNOWN_IOS_SDK = '14.0'
7
+ LAST_KNOWN_IOS_SDK = '18.0'
8
8
 
9
9
  # @return [String] The last known OS X SDK (stable).
10
10
  #
11
- LAST_KNOWN_OSX_SDK = '10.15'
11
+ LAST_KNOWN_OSX_SDK = '15.0'
12
12
 
13
13
  # @return [String] The last known tvOS SDK (stable).
14
14
  #
15
- LAST_KNOWN_TVOS_SDK = '14.0'
15
+ LAST_KNOWN_TVOS_SDK = '18.0'
16
16
 
17
17
  # @return [String] The last known visionOS SDK (unstable).
18
18
  #
19
- LAST_KNOWN_VISIONOS_SDK = '1.0'
19
+ LAST_KNOWN_VISIONOS_SDK = '2.0'
20
20
 
21
21
  # @return [String] The last known watchOS SDK (stable).
22
22
  #
23
- LAST_KNOWN_WATCHOS_SDK = '7.0'
23
+ LAST_KNOWN_WATCHOS_SDK = '11.0'
24
24
 
25
25
  # @return [String] The last known archive version to Xcodeproj.
26
26
  #
@@ -36,15 +36,15 @@ module Xcodeproj
36
36
 
37
37
  # @return [String] The last known object version to Xcodeproj.
38
38
  #
39
- LAST_KNOWN_OBJECT_VERSION = 63
39
+ LAST_KNOWN_OBJECT_VERSION = 77
40
40
 
41
41
  # @return [String] The last known Xcode version to Xcodeproj.
42
42
  #
43
- LAST_UPGRADE_CHECK = '1500'
43
+ LAST_UPGRADE_CHECK = '1600'
44
44
 
45
45
  # @return [String] The last known Xcode version to Xcodeproj.
46
46
  #
47
- LAST_SWIFT_UPGRADE_CHECK = '1500'
47
+ LAST_SWIFT_UPGRADE_CHECK = '1600'
48
48
 
49
49
  # @return [String] The version of `.xcscheme` files supported by Xcodeproj
50
50
  #
@@ -132,6 +132,7 @@ module Xcodeproj
132
132
  # @return [Hash] The compatibility version string for different object versions.
133
133
  #
134
134
  COMPATIBILITY_VERSION_BY_OBJECT_VERSION = {
135
+ 77 => 'Xcode 16.0',
135
136
  63 => 'Xcode 15.3',
136
137
  60 => 'Xcode 15.0',
137
138
  56 => 'Xcode 14.0',
@@ -271,22 +272,47 @@ module Xcodeproj
271
272
  'DYLIB_COMPATIBILITY_VERSION' => '1',
272
273
  'DYLIB_CURRENT_VERSION' => '1',
273
274
  'DYLIB_INSTALL_NAME_BASE' => '@rpath',
275
+ 'ENABLE_MODULE_VERIFIER' => 'YES',
276
+ 'GENERATE_INFOPLIST_FILE' => 'YES',
274
277
  'INSTALL_PATH' => '$(LOCAL_LIBRARY_DIR)/Frameworks',
278
+ 'MARKETING_VERSION' => '1.0',
279
+ 'MODULE_VERIFIER_SUPPORTED_LANGUAGES' => 'objective-c objective-c++',
280
+ 'MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS' => 'gnu17 gnu++20',
275
281
  'PRODUCT_NAME' => '$(TARGET_NAME:c99extidentifier)',
276
282
  'SKIP_INSTALL' => 'YES',
283
+ 'SWIFT_EMIT_LOC_STRINGS' => 'YES',
277
284
  'VERSION_INFO_PREFIX' => '',
278
285
  'VERSIONING_SYSTEM' => 'apple-generic',
279
286
  }.freeze,
280
287
  [:ios, :framework] => {
288
+ 'ENABLE_MODULE_VERIFIER' => 'YES',
289
+ 'GENERATE_INFOPLIST_FILE' => 'YES',
281
290
  'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) @executable_path/Frameworks @loader_path/Frameworks',
291
+ 'MARKETING_VERSION' => '1.0',
282
292
  'TARGETED_DEVICE_FAMILY' => '1,2',
293
+ 'SWIFT_EMIT_LOC_STRINGS' => 'YES',
283
294
  }.freeze,
284
295
  [:osx, :framework] => {
285
296
  'COMBINE_HIDPI_IMAGES' => 'YES',
297
+ 'ENABLE_MODULE_VERIFIER' => 'YES',
286
298
  'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) @executable_path/../Frameworks @loader_path/Frameworks',
299
+ 'SWIFT_EMIT_LOC_STRINGS' => 'YES',
300
+ }.freeze,
301
+ [:osx, :framework, :objc] => {
302
+ 'ENABLE_MODULE_VERIFIER' => 'YES',
303
+ 'GENERATE_INFOPLIST_FILE' => 'YES',
304
+ 'MARKETING_VERSION' => '1.0',
305
+ 'SWIFT_EMIT_LOC_STRINGS' => 'YES',
306
+ }.freeze,
307
+ [:osx, :framework, :swift] => {
308
+ 'ENABLE_MODULE_VERIFIER' => 'YES',
309
+ 'GENERATE_INFOPLIST_FILE' => 'YES',
310
+ 'MARKETING_VERSION' => '1.0',
311
+ 'MODULE_VERIFIER_SUPPORTED_LANGUAGES' => 'objective-c objective-c++',
312
+ 'MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS' => 'gnu17 gnu++20',
313
+ 'SWIFT_EMIT_LOC_STRINGS' => 'YES',
287
314
  }.freeze,
288
315
  [:watchos, :framework] => {
289
- 'APPLICATION_EXTENSION_API_ONLY' => 'YES',
290
316
  'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) @executable_path/Frameworks @loader_path/Frameworks',
291
317
  'TARGETED_DEVICE_FAMILY' => '4',
292
318
  }.freeze,
@@ -296,6 +322,8 @@ module Xcodeproj
296
322
  }.freeze,
297
323
  [:framework, :swift] => {
298
324
  'DEFINES_MODULE' => 'YES',
325
+ 'BUILD_LIBRARY_FOR_DISTRIBUTION' => 'YES',
326
+ 'SWIFT_INSTALL_OBJC_HEADER' => 'NO',
299
327
  }.freeze,
300
328
  [:osx, :static_library] => {
301
329
  'EXECUTABLE_PREFIX' => 'lib',
@@ -325,30 +353,47 @@ module Xcodeproj
325
353
  [:application] => {
326
354
  'ASSETCATALOG_COMPILER_APPICON_NAME' => 'AppIcon',
327
355
  'ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME' => 'AccentColor',
356
+ 'CURRENT_PROJECT_VERSION' => '1',
357
+ 'GENERATE_INFOPLIST_FILE' => 'YES',
358
+ 'MARKETING_VERSION' => '1.0',
359
+ 'SWIFT_EMIT_LOC_STRINGS' => 'YES',
328
360
  }.freeze,
329
361
  [:ios, :application] => {
330
362
  'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) @executable_path/Frameworks',
331
363
  'TARGETED_DEVICE_FAMILY' => '1,2',
332
364
  }.freeze,
365
+ [:ios, :application, :swift] => {
366
+ 'INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents' => 'YES',
367
+ 'INFOPLIST_KEY_UIMainStoryboardFile' => 'Main',
368
+ 'INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad' => 'UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight',
369
+ 'INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone' => 'UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight',
370
+ }.freeze,
333
371
  [:osx, :application] => {
334
372
  'COMBINE_HIDPI_IMAGES' => 'YES',
373
+ 'CURRENT_PROJECT_VERSION' => '1',
374
+ 'GENERATE_INFOPLIST_FILE' => 'YES',
335
375
  'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) @executable_path/../Frameworks',
376
+ 'MARKETING_VERSION' => '1.0',
377
+ 'SWIFT_EMIT_LOC_STRINGS' => 'YES',
336
378
  }.freeze,
337
379
  [:watchos, :application] => {
380
+ 'ENABLE_PREVIEWS' => 'YES',
381
+ 'INFOPLIST_KEY_UISupportedInterfaceOrientations' => 'UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown',
382
+ 'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) @executable_path/Frameworks',
338
383
  'SKIP_INSTALL' => 'YES',
339
384
  'TARGETED_DEVICE_FAMILY' => '4',
340
385
  }.freeze,
341
386
  [:tvos, :application] => {
342
387
  'ASSETCATALOG_COMPILER_APPICON_NAME' => 'App Icon & Top Shelf Image',
388
+ 'INFOPLIST_KEY_UILaunchStoryboardName' => 'LaunchScreen',
389
+ 'INFOPLIST_KEY_UIMainStoryboardFile' => 'Main',
390
+ 'INFOPLIST_KEY_UIUserInterfaceStyle' => 'Automatic',
343
391
  'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) @executable_path/Frameworks',
344
392
  'TARGETED_DEVICE_FAMILY' => '3',
345
393
  }.freeze,
346
394
  [:tvos, :application, :swift] => {
347
395
  'ENABLE_PREVIEWS' => 'YES',
348
396
  }.freeze,
349
- [:watchos, :application, :swift] => {
350
- 'ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES' => 'YES',
351
- }.freeze,
352
397
  [:bundle] => {
353
398
  'WRAPPER_EXTENSION' => 'bundle',
354
399
  'SKIP_INSTALL' => 'YES',
@@ -357,9 +402,14 @@ module Xcodeproj
357
402
  'SDKROOT' => 'iphoneos',
358
403
  }.freeze,
359
404
  [:osx, :bundle] => {
360
- 'COMBINE_HIDPI_IMAGES' => 'YES',
361
- 'INSTALL_PATH' => '$(LOCAL_LIBRARY_DIR)/Bundles',
362
- 'SDKROOT' => 'macosx',
405
+ 'COMBINE_HIDPI_IMAGES' => 'YES',
406
+ 'CURRENT_PROJECT_VERSION' => '1',
407
+ 'GENERATE_INFOPLIST_FILE' => 'YES',
408
+ 'INFOPLIST_KEY_NSPrincipalClass' => '',
409
+ 'INSTALL_PATH' => '$(LOCAL_LIBRARY_DIR)/Bundles',
410
+ 'MARKETING_VERSION' => '1.0',
411
+ 'SDKROOT' => 'macosx',
412
+ 'SWIFT_EMIT_LOC_STRINGS' => 'YES',
363
413
  }.freeze,
364
414
  }.freeze
365
415
 
@@ -368,10 +418,10 @@ module Xcodeproj
368
418
  PROJECT_DEFAULT_BUILD_SETTINGS = {
369
419
  :all => {
370
420
  'ALWAYS_SEARCH_USER_PATHS' => 'NO',
421
+ 'ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS' => 'YES',
371
422
  'CLANG_ANALYZER_NONNULL' => 'YES',
372
423
  'CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION' => 'YES_AGGRESSIVE',
373
- 'CLANG_CXX_LANGUAGE_STANDARD' => 'gnu++14',
374
- 'CLANG_CXX_LIBRARY' => 'libc++',
424
+ 'CLANG_CXX_LANGUAGE_STANDARD' => 'gnu++20',
375
425
  'CLANG_ENABLE_MODULES' => 'YES',
376
426
  'CLANG_ENABLE_OBJC_ARC' => 'YES',
377
427
  'CLANG_ENABLE_OBJC_WEAK' => 'YES',
@@ -399,7 +449,8 @@ module Xcodeproj
399
449
  'CLANG_WARN_UNREACHABLE_CODE' => 'YES',
400
450
  'COPY_PHASE_STRIP' => 'NO',
401
451
  'ENABLE_STRICT_OBJC_MSGSEND' => 'YES',
402
- 'GCC_C_LANGUAGE_STANDARD' => 'gnu11',
452
+ 'ENABLE_USER_SCRIPT_SANDBOXING' => 'YES',
453
+ 'GCC_C_LANGUAGE_STANDARD' => 'gnu17',
403
454
  'GCC_NO_COMMON_BLOCKS' => 'YES',
404
455
  'GCC_WARN_64_TO_32_BIT_CONVERSION' => 'YES',
405
456
  'GCC_WARN_ABOUT_RETURN_TYPE' => 'YES_ERROR',
@@ -407,6 +458,7 @@ module Xcodeproj
407
458
  'GCC_WARN_UNINITIALIZED_AUTOS' => 'YES_AGGRESSIVE',
408
459
  'GCC_WARN_UNUSED_FUNCTION' => 'YES',
409
460
  'GCC_WARN_UNUSED_VARIABLE' => 'YES',
461
+ 'LOCALIZATION_PREFERS_STRING_CATALOGS' => 'YES',
410
462
  'MTL_FAST_MATH' => 'YES',
411
463
  'PRODUCT_NAME' => '$(TARGET_NAME)',
412
464
  'SWIFT_VERSION' => '5.0',
@@ -416,7 +468,6 @@ module Xcodeproj
416
468
  'ENABLE_NS_ASSERTIONS' => 'NO',
417
469
  'MTL_ENABLE_DEBUG_INFO' => 'NO',
418
470
  'SWIFT_COMPILATION_MODE' => 'wholemodule',
419
- 'SWIFT_OPTIMIZATION_LEVEL' => '-O',
420
471
  }.freeze,
421
472
  :debug => {
422
473
  'DEBUG_INFORMATION_FORMAT' => 'dwarf',
@@ -426,7 +477,7 @@ module Xcodeproj
426
477
  'GCC_PREPROCESSOR_DEFINITIONS' => ['DEBUG=1', '$(inherited)'],
427
478
  'MTL_ENABLE_DEBUG_INFO' => 'INCLUDE_SOURCE',
428
479
  'ONLY_ACTIVE_ARCH' => 'YES',
429
- 'SWIFT_ACTIVE_COMPILATION_CONDITIONS' => 'DEBUG',
480
+ 'SWIFT_ACTIVE_COMPILATION_CONDITIONS' => 'DEBUG $(inherited)',
430
481
  'SWIFT_OPTIMIZATION_LEVEL' => '-Onone',
431
482
  }.freeze,
432
483
  }.freeze
@@ -1,5 +1,5 @@
1
1
  module Xcodeproj
2
2
  # The version of the xcodeproj gem.
3
3
  #
4
- VERSION = '1.25.0'.freeze unless defined? Xcodeproj::VERSION
4
+ VERSION = '1.26.0'.freeze unless defined? Xcodeproj::VERSION
5
5
  end
@@ -1,3 +1,5 @@
1
+ require 'xcodeproj/project/object/file_system_synchronized_root_group'
2
+
1
3
  module Xcodeproj
2
4
  class Project
3
5
  module Object
@@ -25,6 +27,20 @@ module Xcodeproj
25
27
  #
26
28
  has_one :base_configuration_reference, PBXFileReference
27
29
 
30
+ # @return [PBXFileSystemSynchronizedRootGroup] an optional reference to a group
31
+ # synchronized with the file system that contains a configuration file (`.xcconfig`).
32
+ #
33
+ # @note the configuration file relative path must be provided in `base_configuration_reference_relative_path`
34
+ #
35
+ has_one :base_configuration_reference_anchor, PBXFileSystemSynchronizedRootGroup
36
+
37
+ # @return [String] the relative path of a configuration file (`.xcconfig`)
38
+ # inside a group synchronized with the file system.
39
+ #
40
+ # @note the configuration file group must be provided in `base_configuration_reference_anchor`
41
+ #
42
+ attribute :base_configuration_reference_relative_path, String
43
+
28
44
  public
29
45
 
30
46
  # @!group AbstractObject Hooks
@@ -0,0 +1,62 @@
1
+ require 'xcodeproj/project/object_attributes'
2
+ require 'xcodeproj/project/object/helpers/groupable_helper'
3
+
4
+ module Xcodeproj
5
+ class Project
6
+ module Object
7
+ # This class represents a file system synchronized build file exception set.
8
+ class PBXFileSystemSynchronizedBuildFileExceptionSet < AbstractObject
9
+ # @return [AbstractTarget] The target to which this exception set applies.
10
+ #
11
+ has_one :target, AbstractTarget
12
+
13
+ # @return [Array<String>] The list of files in the group that are excluded from the target.
14
+ #
15
+ attribute :membership_exceptions, Array
16
+
17
+ # @return [Array<String>] The list of public headers.
18
+ #
19
+ attribute :public_headers, Array
20
+
21
+ # @return [Array<String>] The list of private headers.
22
+ #
23
+ attribute :private_headers, Array
24
+
25
+ # @return [Hash] The files with specific compiler flags.
26
+ #
27
+ attribute :additional_compiler_flags_by_relative_path, Hash
28
+
29
+ # @return [Hash] The files with specific attributes.
30
+ #
31
+ attribute :attributes_by_relative_path, Hash
32
+
33
+ # @return [Hash] The files with a platform filter.
34
+ #
35
+ attribute :platform_filters_by_relative_path, Hash
36
+
37
+ def display_name
38
+ "Exceptions for \"#{GroupableHelper.parent(self).display_name}\" folder in \"#{target.name}\" target"
39
+ end
40
+ end
41
+
42
+ # This class represents a file system synchronized group build phase membership exception set.
43
+ class PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet < AbstractObject
44
+ # @return [PBXSourcesBuildPhase, PBXCopyFilesBuildPhase] The build phase to which this exception set applies.
45
+ #
46
+ has_one :build_phase, [PBXSourcesBuildPhase, PBXCopyFilesBuildPhase]
47
+
48
+ # @return [Array<String>] The list of files in the group that are excluded from the build phase.
49
+ #
50
+ attribute :membership_exceptions, Array
51
+
52
+ # @return [Hash] The files with a platform filter.
53
+ #
54
+ attribute :platform_filters_by_relative_path, Hash
55
+
56
+ def display_name
57
+ "Exceptions for \"#{GroupableHelper.parent(self).display_name}\" folder in \"#{build_phase.name}\" build phase"
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,74 @@
1
+ require 'xcodeproj/project/object/file_system_synchronized_exception_set'
2
+
3
+ module Xcodeproj
4
+ class Project
5
+ module Object
6
+ # This class represents a file system synchronized root group.
7
+ class PBXFileSystemSynchronizedRootGroup < AbstractObject
8
+ # @return [String] the directory to which the path is relative.
9
+ #
10
+ # @note The accepted values are:
11
+ # - `<absolute>` for absolute paths
12
+ # - `<group>` for paths relative to the group
13
+ # - `SOURCE_ROOT` for paths relative to the project
14
+ # - `DEVELOPER_DIR` for paths relative to the developer
15
+ # directory.
16
+ # - `BUILT_PRODUCTS_DIR` for paths relative to the build
17
+ # products directory.
18
+ # - `SDKROOT` for paths relative to the SDK directory.
19
+ #
20
+ attribute :source_tree, String, '<group>'
21
+
22
+ # @return [String] the path to a folder in the file system.
23
+ #
24
+ attribute :path, String
25
+
26
+ # @return [String] Whether Xcode should use tabs for text alignment.
27
+ #
28
+ # @example
29
+ # `1`
30
+ #
31
+ attribute :uses_tabs, String
32
+
33
+ # @return [String] The width of the indent.
34
+ #
35
+ # @example
36
+ # `2`
37
+ #
38
+ attribute :indent_width, String
39
+
40
+ # @return [String] The width of the tabs.
41
+ #
42
+ # @example
43
+ # `2`
44
+ #
45
+ attribute :tab_width, String
46
+
47
+ # @return [String] Whether Xcode should wrap lines.
48
+ #
49
+ # @example
50
+ # `1`
51
+ #
52
+ attribute :wraps_lines, String
53
+
54
+ # @return [Array<PBXFileSystemSynchronizedBuildFileExceptionSet, PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet>]
55
+ # The list of exceptions applying to this group.
56
+ #
57
+ has_many :exceptions, [PBXFileSystemSynchronizedBuildFileExceptionSet, PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet]
58
+
59
+ # @return [Hash] The files in the group that have a file type defined explicitly.
60
+ #
61
+ attribute :explicit_file_types, Hash
62
+
63
+ # @return [Array] The folders in the group that are defined explicitly.
64
+ #
65
+ attribute :explicit_folders, Array
66
+
67
+ def display_name
68
+ return path if path
69
+ super
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -1,5 +1,6 @@
1
1
  require 'xcodeproj/project/object/helpers/groupable_helper'
2
2
  require 'xcodeproj/project/object/helpers/file_references_factory'
3
+ require 'xcodeproj/project/object/file_system_synchronized_root_group'
3
4
 
4
5
  module Xcodeproj
5
6
  class Project
@@ -13,7 +14,7 @@ module Xcodeproj
13
14
  # @return [ObjectList<PBXGroup, PBXFileReference>]
14
15
  # the objects contained by the group.
15
16
  #
16
- has_many :children, [PBXGroup, PBXFileReference, PBXReferenceProxy]
17
+ has_many :children, [PBXGroup, PBXFileReference, PBXReferenceProxy, PBXFileSystemSynchronizedRootGroup]
17
18
 
18
19
  # @return [String] the directory to which the path is relative.
19
20
  #
@@ -461,6 +461,11 @@ module Xcodeproj
461
461
  #
462
462
  has_many :build_phases, AbstractBuildPhase
463
463
 
464
+ # @return [ObjectList<PBXFileSystemSynchronizedRootGroup>] the file system synchronized
465
+ # groups containing files to include to build this target.
466
+ #
467
+ has_many :file_system_synchronized_groups, PBXFileSystemSynchronizedRootGroup
468
+
464
469
  public
465
470
 
466
471
  # @!group Helpers
@@ -684,19 +689,28 @@ module Xcodeproj
684
689
 
685
690
  def to_hash_as(method = :to_hash)
686
691
  hash_as = super
687
- if !hash_as['packageProductDependencies'].nil? && hash_as['packageProductDependencies'].empty?
688
- hash_as.delete('packageProductDependencies')
692
+ excluded_keys_for_serialization_when_empty.each do |key|
693
+ if !hash_as[key].nil? && hash_as[key].empty?
694
+ hash_as.delete(key)
695
+ end
689
696
  end
690
697
  hash_as
691
698
  end
692
699
 
693
700
  def to_ascii_plist
694
701
  plist = super
695
- if !plist.value['packageProductDependencies'].nil? && plist.value['packageProductDependencies'].empty?
696
- plist.value.delete('packageProductDependencies')
702
+ excluded_keys_for_serialization_when_empty.each do |key|
703
+ if !plist.value[key].nil? && plist.value[key].empty?
704
+ plist.value.delete(key)
705
+ end
697
706
  end
698
707
  plist
699
708
  end
709
+
710
+ # @return [Array<String>] array of keys to exclude from serialization when the value is empty
711
+ def excluded_keys_for_serialization_when_empty
712
+ %w(packageProductDependencies fileSystemSynchronizedGroups)
713
+ end
700
714
  end
701
715
 
702
716
  #-----------------------------------------------------------------------#
@@ -53,6 +53,10 @@ module Xcodeproj
53
53
  #
54
54
  attribute :minimized_project_reference_proxies, String, '0'
55
55
 
56
+ # @return [String] preferred project object version
57
+ #
58
+ attribute :preferred_project_object_version, String, Constants::LAST_KNOWN_OBJECT_VERSION.to_s
59
+
56
60
  # @return [PBXGroup] the group containing the references to products of
57
61
  # the project.
58
62
  #
@@ -533,3 +533,5 @@ require 'xcodeproj/project/object/native_target'
533
533
  require 'xcodeproj/project/object/root_object'
534
534
  require 'xcodeproj/project/object/target_dependency'
535
535
  require 'xcodeproj/project/object/reference_proxy'
536
+ require 'xcodeproj/project/object/file_system_synchronized_root_group'
537
+ require 'xcodeproj/project/object/file_system_synchronized_exception_set'
@@ -140,7 +140,7 @@ module Xcodeproj
140
140
  "for attribute: #{inspect}" unless acceptable
141
141
  else
142
142
  raise "[Xcodeproj] Type checking error: got `#{object.isa}` for " \
143
- "attribute: #{inspect}" unless acceptable
143
+ "attribute: #{inspect} - #{object.uuid} #{object.to_ascii_plist}" unless acceptable
144
144
  end
145
145
  end
146
146
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcodeproj
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.25.0
4
+ version: 1.26.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eloy Duran
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-07 00:00:00.000000000 Z
11
+ date: 2024-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: atomos
@@ -84,21 +84,21 @@ dependencies:
84
84
  requirements:
85
85
  - - "~>"
86
86
  - !ruby/object:Gem::Version
87
- version: 0.3.0
87
+ version: 0.4.0
88
88
  type: :runtime
89
89
  prerelease: false
90
90
  version_requirements: !ruby/object:Gem::Requirement
91
91
  requirements:
92
92
  - - "~>"
93
93
  - !ruby/object:Gem::Version
94
- version: 0.3.0
94
+ version: 0.4.0
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: rexml
97
97
  requirement: !ruby/object:Gem::Requirement
98
98
  requirements:
99
99
  - - ">="
100
100
  - !ruby/object:Gem::Version
101
- version: 3.3.2
101
+ version: 3.3.6
102
102
  - - "<"
103
103
  - !ruby/object:Gem::Version
104
104
  version: '4.0'
@@ -108,7 +108,7 @@ dependencies:
108
108
  requirements:
109
109
  - - ">="
110
110
  - !ruby/object:Gem::Version
111
- version: 3.3.2
111
+ version: 3.3.6
112
112
  - - "<"
113
113
  - !ruby/object:Gem::Version
114
114
  version: '4.0'
@@ -148,6 +148,8 @@ files:
148
148
  - lib/xcodeproj/project/object/configuration_list.rb
149
149
  - lib/xcodeproj/project/object/container_item_proxy.rb
150
150
  - lib/xcodeproj/project/object/file_reference.rb
151
+ - lib/xcodeproj/project/object/file_system_synchronized_exception_set.rb
152
+ - lib/xcodeproj/project/object/file_system_synchronized_root_group.rb
151
153
  - lib/xcodeproj/project/object/group.rb
152
154
  - lib/xcodeproj/project/object/helpers/build_settings_array_settings_by_object_version.rb
153
155
  - lib/xcodeproj/project/object/helpers/file_references_factory.rb