rswift 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +56 -0
  7. data/Rakefile +6 -0
  8. data/bin/rswift +7 -0
  9. data/lib/ext/array.rb +12 -0
  10. data/lib/ext/group.rb +24 -0
  11. data/lib/ext/native_target.rb +54 -0
  12. data/lib/ext/project.rb +68 -0
  13. data/lib/rswift.rb +22 -0
  14. data/lib/rswift/attributes_configurator.rb +20 -0
  15. data/lib/rswift/build_settings_configurator.rb +26 -0
  16. data/lib/rswift/build_settings_provider.rb +84 -0
  17. data/lib/rswift/cli.rb +33 -0
  18. data/lib/rswift/configuration.rb +41 -0
  19. data/lib/rswift/constants.rb +106 -0
  20. data/lib/rswift/device_provider.rb +25 -0
  21. data/lib/rswift/files_references_manager.rb +17 -0
  22. data/lib/rswift/group_references_manager.rb +114 -0
  23. data/lib/rswift/project_configurator.rb +41 -0
  24. data/lib/rswift/scheme_configurator.rb +10 -0
  25. data/lib/rswift/target_configurator.rb +22 -0
  26. data/lib/rswift/template_manager.rb +28 -0
  27. data/lib/rswift/templates/app/ios/.gitignore.erb +22 -0
  28. data/lib/rswift/templates/app/ios/Gemfile.erb +4 -0
  29. data/lib/rswift/templates/app/ios/Podfile.erb +11 -0
  30. data/lib/rswift/templates/app/ios/Rakefile.erb +1 -0
  31. data/lib/rswift/templates/app/ios/app/AppDelegate.swift.erb +15 -0
  32. data/lib/rswift/templates/app/ios/app/Assets.xcassets/AppIcon.appiconset/Contents.json.erb +73 -0
  33. data/lib/rswift/templates/app/ios/app/Info.plist.erb +45 -0
  34. data/lib/rswift/templates/app/ios/app/LaunchScreen.storyboard.erb +28 -0
  35. data/lib/rswift/templates/app/ios/package.json.erb +14 -0
  36. data/lib/rswift/templates/app/ios/spec/AppDelegateSpec.swift.erb +24 -0
  37. data/lib/rswift/templates/app/ios/spec/Info.plist.erb +24 -0
  38. data/lib/rswift/templates/app/osx/.gitignore.erb +21 -0
  39. data/lib/rswift/templates/app/osx/Gemfile.erb +4 -0
  40. data/lib/rswift/templates/app/osx/Podfile.erb +7 -0
  41. data/lib/rswift/templates/app/osx/Rakefile.erb +1 -0
  42. data/lib/rswift/templates/app/osx/app/AppDelegate.swift.erb +30 -0
  43. data/lib/rswift/templates/app/osx/app/Assets.xcassets/AppIcon.appiconset/Contents.json.erb +58 -0
  44. data/lib/rswift/templates/app/osx/app/Info.plist.erb +30 -0
  45. data/lib/rswift/templates/app/osx/app/main.swift.erb +5 -0
  46. data/lib/rswift/templates/app/osx/spec/AppDelegateSpec.swift.erb +24 -0
  47. data/lib/rswift/templates/app/osx/spec/Info.plist.erb +24 -0
  48. data/lib/rswift/templates/app/tvos/.gitignore.erb +21 -0
  49. data/lib/rswift/templates/app/tvos/Gemfile.erb +4 -0
  50. data/lib/rswift/templates/app/tvos/Podfile.erb +11 -0
  51. data/lib/rswift/templates/app/tvos/Rakefile.erb +1 -0
  52. data/lib/rswift/templates/app/tvos/app/AppDelegate.swift.erb +15 -0
  53. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json.erb +12 -0
  54. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json.erb +6 -0
  55. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/App Icon - Large.imagestack/Contents.json.erb +17 -0
  56. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json.erb +12 -0
  57. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json.erb +6 -0
  58. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json.erb +12 -0
  59. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json.erb +6 -0
  60. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json.erb +12 -0
  61. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json.erb +6 -0
  62. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/App Icon - Small.imagestack/Contents.json.erb +17 -0
  63. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json.erb +12 -0
  64. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json.erb +6 -0
  65. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json.erb +12 -0
  66. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json.erb +6 -0
  67. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/Contents.json.erb +26 -0
  68. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/AppIcon.brandassets/Top Shelf Image.imageset/Contents.json.erb +12 -0
  69. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/Contents.json.erb +6 -0
  70. data/lib/rswift/templates/app/tvos/app/Assets.xcassets/LaunchImage.launchimage/Contents.json.erb +15 -0
  71. data/lib/rswift/templates/app/tvos/app/Info.plist.erb +30 -0
  72. data/lib/rswift/templates/app/tvos/spec/AppDelegateSpec.swift.erb +24 -0
  73. data/lib/rswift/templates/app/tvos/spec/Info.plist.erb +24 -0
  74. data/lib/rswift/templates/app/watchos/wk_app/Assets.xcassets/AppIcon.appiconset/Contents.json.erb +55 -0
  75. data/lib/rswift/templates/app/watchos/wk_app/Info.plist.erb +35 -0
  76. data/lib/rswift/templates/app/watchos/wk_app/Interface.storyboard.erb +15 -0
  77. data/lib/rswift/templates/app/watchos/wk_ext/Assets.xcassets/README__ignoredByTemplate__ +1 -0
  78. data/lib/rswift/templates/app/watchos/wk_ext/ExtensionDelegate.swift.erb +4 -0
  79. data/lib/rswift/templates/app/watchos/wk_ext/Info.plist.erb +40 -0
  80. data/lib/rswift/templates/app/watchos/wk_ext/InterfaceController.swift.erb +6 -0
  81. data/lib/rswift/version.rb +3 -0
  82. data/lib/rswift/workspace_provider.rb +11 -0
  83. data/rswift.gemspec +26 -0
  84. metadata +227 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 853c99821b8eaf9ff8f1dd9719398374487d8a2e
4
+ data.tar.gz: 64732b0db9a6c44c116a7382afd3d1249160a8f0
5
+ SHA512:
6
+ metadata.gz: 96e86d11c94720acd93a59e7be5eac3ef080ab669a015264a80411764ddc824403ec1e6b63a64f0e316b626708391e458e57a473ea957157c13fd4630332daf8
7
+ data.tar.gz: 99921353e1d96713d22c8c83ad35ca3ead49de2b4db3d36d57f3aeb3f6d73df4e67a7ce3b280b370cdb460b31d23913e034e356df0df24687a4e4801e2ace0eb
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ .idea/
11
+ .byebug_history
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rswift.gemspec
4
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Lukasz Wolanczyk
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,56 @@
1
+ # RSwift
2
+
3
+ RSwift allows to create and develop iOS, OSX, tvOS and watchOS projects using CLI.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'rswift'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install rswift
20
+
21
+ ## Usage
22
+
23
+ To create iOS app run `rswift app MyAppName`.
24
+
25
+ Enter app directory `cd MyAppName`.
26
+
27
+ Install gems `bundle install`.
28
+
29
+ Install pods `pod install`.
30
+
31
+ Install node modules `npm install`.
32
+
33
+
34
+ You can specify OSX, tvOS and watchOS template, for example `rswift app --template=osx MyOSXApp`.
35
+
36
+ Available templates are:
37
+ * `ios` (default)
38
+ * `osx`
39
+ * `tvos`
40
+ * `watchos` (still under development)
41
+
42
+ ## Development
43
+
44
+ Run tests with `rake spec`.
45
+
46
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
47
+
48
+ ## Contributing
49
+
50
+ Bug reports and pull requests are welcome on GitHub at https://github.com/lukwol/rswift-ios.
51
+
52
+
53
+ ## License
54
+
55
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
56
+
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift(File.dirname(File.realpath(__FILE__)) + '/../lib')
4
+
5
+ require 'rswift'
6
+
7
+ RSwift::CLI.start(ARGV)
@@ -0,0 +1,12 @@
1
+ class Array
2
+
3
+ def all_combinations
4
+ all_combinations = []
5
+ 0.upto(count) do |n|
6
+ combination(n).each do |combination|
7
+ all_combinations << combination
8
+ end
9
+ end
10
+ all_combinations
11
+ end
12
+ end
@@ -0,0 +1,24 @@
1
+ module Xcodeproj
2
+ class Project
3
+ module Object
4
+ class PBXGroup
5
+
6
+ def file_for_path(path)
7
+ result_file = files.find do |file|
8
+ file.path == path
9
+ end
10
+ result_file = new_file(path) unless result_file
11
+ result_file
12
+ end
13
+
14
+ def group_for_path(path)
15
+ result_group = groups.find do |group|
16
+ group.path == path
17
+ end
18
+ result_group = new_group(path, path) unless result_group
19
+ result_group
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,54 @@
1
+ module Xcodeproj
2
+ class Project
3
+ module Object
4
+ class PBXNativeTarget
5
+
6
+ def debug_build_configuration
7
+ build_configuration_name = RSwift::Configuration.new.debug_build_configuration
8
+ build_configuration_name ||= RSwift::Constants::CONFIGURATION_PROPERTIES[:debug][:name]
9
+ build_configurations.find do |build_configuration|
10
+ build_configuration.name.eql? build_configuration_name
11
+ end
12
+ end
13
+
14
+ def release_build_configuration
15
+ build_configuration_name = RSwift::Configuration.new.release_build_configuration
16
+ build_configuration_name ||= RSwift::Constants::CONFIGURATION_PROPERTIES[:release][:name]
17
+ build_configurations.find do |build_configuration|
18
+ build_configuration.name.eql? build_configuration_name
19
+ end
20
+ end
21
+
22
+ def product_name
23
+ product_name = RSwift::Configuration.new.product_name
24
+ product_name ||= super
25
+ product_name
26
+ end
27
+
28
+ def product_type_uti
29
+ Xcodeproj::Constants::PRODUCT_TYPE_UTI.key(product_type)
30
+ end
31
+
32
+ def suffix
33
+ RSwift::Constants::TARGET_PROPERTIES[product_type_uti][:suffix]
34
+ end
35
+
36
+ def group_name
37
+ RSwift::Constants::TARGET_PROPERTIES[product_type_uti][:group_name]
38
+ end
39
+
40
+ def debug_product_bundle_identifier
41
+ product_bundle_identifier = RSwift::Configuration.new.debug_product_bundle_identifier
42
+ product_bundle_identifier ||= debug_build_configuration.build_settings['PRODUCT_BUNDLE_IDENTIFIER']
43
+ product_bundle_identifier
44
+ end
45
+
46
+ def release_product_bundle_identifier
47
+ product_bundle_identifier = RSwift::Configuration.new.release_product_bundle_identifier
48
+ product_bundle_identifier ||= release_build_configuration.build_settings['PRODUCT_BUNDLE_IDENTIFIER']
49
+ product_bundle_identifier
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,68 @@
1
+ module Xcodeproj
2
+ class Project
3
+
4
+ def name
5
+ path.dirname.split.last.to_s
6
+ end
7
+
8
+ def debug_build_configuration
9
+ build_configuration_name = RSwift::Configuration.new.debug_build_configuration
10
+ build_configuration_name ||= RSwift::Constants::CONFIGURATION_PROPERTIES[:debug][:name]
11
+ build_configurations.find do |build_configuration|
12
+ build_configuration.name.eql? build_configuration_name
13
+ end
14
+ end
15
+
16
+ def release_build_configuration
17
+ build_configuration_name = RSwift::Configuration.new.release_build_configuration
18
+ build_configuration_name ||= RSwift::Constants::CONFIGURATION_PROPERTIES[:release][:name]
19
+ build_configurations.find do |build_configuration|
20
+ build_configuration.name.eql? build_configuration_name
21
+ end
22
+ end
23
+
24
+ def app_target
25
+ targets.find { |target| target.product_type.eql? Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application] }
26
+ end
27
+
28
+ def spec_target
29
+ targets.find { |target| target.product_type.eql? Xcodeproj::Constants::PRODUCT_TYPE_UTI[:unit_test_bundle] }
30
+ end
31
+
32
+ def wk_app_target
33
+ targets.find { |target| target.product_type.eql? Xcodeproj::Constants::PRODUCT_TYPE_UTI[:watch2_app] }
34
+ end
35
+
36
+ def wk_ext_target
37
+ targets.find { |target| target.product_type.eql? Xcodeproj::Constants::PRODUCT_TYPE_UTI[:watch2_extension] }
38
+ end
39
+
40
+ def app_scheme_name
41
+ schemes_names = Xcodeproj::Project.schemes(path)
42
+ schemes_names.find do |scheme_name|
43
+ is_app_scheme(scheme_for_scheme_name(scheme_name))
44
+ end
45
+ end
46
+
47
+ def app_scheme
48
+ scheme_name = RSwift::Configuration.new.app_scheme_name
49
+ scheme_name ||= app_scheme_name
50
+ scheme_for_scheme_name(scheme_name)
51
+ end
52
+
53
+ private
54
+
55
+ def scheme_for_scheme_name(scheme_name)
56
+ shared_data_dir = Xcodeproj::XCScheme.shared_data_dir path
57
+ scheme_file_path = "#{shared_data_dir}/#{scheme_name}.xcscheme"
58
+ scheme = Xcodeproj::XCScheme.new(scheme_file_path) if File.exist?(scheme_file_path)
59
+ scheme
60
+ end
61
+
62
+ def is_app_scheme(scheme)
63
+ has_proper_launch_action = scheme.launch_action.buildable_product_runnable.buildable_reference.target_uuid.eql?(app_target.uuid)
64
+ has_proper_buildable_action = scheme.profile_action.buildable_product_runnable.buildable_reference.target_uuid.eql?(app_target.uuid)
65
+ has_proper_launch_action && has_proper_buildable_action
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,22 @@
1
+ require 'rswift/cli'
2
+ require 'rswift/template_manager'
3
+ require 'rswift/project_configurator'
4
+ require 'rswift/target_configurator'
5
+ require 'rswift/build_settings_configurator'
6
+ require 'rswift/build_settings_provider'
7
+ require 'rswift/attributes_configurator'
8
+ require 'rswift/group_references_manager'
9
+ require 'rswift/constants'
10
+ require 'rswift/files_references_manager'
11
+ require 'rswift/scheme_configurator'
12
+ require 'rswift/device_provider'
13
+ require 'rswift/workspace_provider'
14
+ require 'rswift/configuration'
15
+
16
+ require 'ext/array'
17
+ require 'ext/group'
18
+ require 'ext/native_target'
19
+ require 'ext/project'
20
+
21
+ module RSwift
22
+ end
@@ -0,0 +1,20 @@
1
+ module RSwift
2
+ class AttributesConfigurator
3
+
4
+ def configure_project_attributes(project)
5
+ project.root_object.attributes.merge! target_attributes(project)
6
+ end
7
+
8
+ private
9
+
10
+ def target_attributes(project)
11
+ {
12
+ 'TargetAttributes' => {
13
+ project.spec_target.uuid => {
14
+ 'TestTargetID' => project.app_target.uuid
15
+ }.freeze
16
+ }.freeze
17
+ }.freeze
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ module RSwift
2
+ class BuildSettingsConfigurator
3
+
4
+ attr_accessor :build_settings_provider
5
+
6
+ def initialize
7
+ @build_settings_provider = RSwift::BuildSettingsProvider.new
8
+ end
9
+
10
+ def configure_project_settings(project, template)
11
+ project_debug_settings = @build_settings_provider.project_debug_settings(template)
12
+ project.debug_build_configuration.build_settings.merge! project_debug_settings
13
+
14
+ project_release_settings = @build_settings_provider.project_release_settings(template)
15
+ project.release_build_configuration.build_settings.merge! project_release_settings
16
+ end
17
+
18
+ def configure_target_settings(project, target, template)
19
+ target_debug_settings = @build_settings_provider.target_debug_settings(project, target, template)
20
+ target.debug_build_configuration.build_settings.merge! target_debug_settings
21
+
22
+ target_release_settings = @build_settings_provider.target_release_settings(project, target, template)
23
+ target.release_build_configuration.build_settings.merge! target_release_settings
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,84 @@
1
+ module RSwift
2
+ class BuildSettingsProvider
3
+
4
+ def project_debug_settings(template)
5
+ options = [template, :debug]
6
+ project_build_settings(options)
7
+ end
8
+
9
+ def project_release_settings(template)
10
+ options = [template, :release]
11
+ project_build_settings(options)
12
+ end
13
+
14
+ def target_debug_settings(project, target, template)
15
+ options = [template, target.product_type_uti, :debug]
16
+ target_build_settings(project, target, options)
17
+ end
18
+
19
+ def target_release_settings(project, target, template)
20
+ options = [template, target.product_type_uti, :release]
21
+ target_build_settings(project, target, options)
22
+ end
23
+
24
+ private
25
+
26
+ def settings(constants, options)
27
+ all_constant_settings = {}
28
+ settings_combinations = options.all_combinations
29
+ settings_combinations.each do |combination|
30
+ constant_settings = constants[combination]
31
+ all_constant_settings.merge! constant_settings if constant_settings
32
+ end
33
+ all_constant_settings
34
+ end
35
+
36
+ def project_build_settings(options)
37
+ project_settings = {
38
+ [:debug] => {
39
+ 'ENABLE_TESTABILITY' => 'YES'
40
+ }.freeze
41
+ }.freeze
42
+ settings(project_settings, options)
43
+ end
44
+
45
+ def target_build_settings(project, target, options)
46
+ target_settings = {
47
+ [] => {
48
+ 'INFOPLIST_FILE' => "#{target.group_name}/Info.plist"
49
+ }.freeze,
50
+ [:ios] => {
51
+ 'TARGETED_DEVICE_FAMILY' => '1,2'
52
+ }.freeze,
53
+ [:application] => {
54
+ 'PRODUCT_BUNDLE_IDENTIFIER' => "com.rswift.#{target.name}"
55
+ }.freeze,
56
+ [:unit_test_bundle] => {
57
+ 'PRODUCT_BUNDLE_IDENTIFIER' => "com.rswift.#{target.name}",
58
+ 'BUNDLE_LOADER' => '$(TEST_HOST)',
59
+ }.freeze,
60
+ [:watch2_app] => {
61
+ 'PRODUCT_BUNDLE_IDENTIFIER' => "com.rswift.#{project.app_target}.watchkitapp"
62
+ }.freeze,
63
+ [:watch2_extension] => {
64
+ 'PRODUCT_BUNDLE_IDENTIFIER' => "com.rswift.#{project.app_target}.watchkitapp.watchkitextension"
65
+ }.freeze,
66
+ [:ios, :unit_test_bundle] => {
67
+ 'TEST_HOST' => "$(BUILT_PRODUCTS_DIR)/#{project.app_target.name}.app/#{project.app_target.name}"
68
+ }.freeze,
69
+ [:osx, :unit_test_bundle] => {
70
+ 'TEST_HOST' => "$(BUILT_PRODUCTS_DIR)/#{project.app_target.name}.app/Contents/MacOS/#{project.app_target.name}",
71
+ 'LD_RUNPATH_SEARCH_PATHS' => %w($(inherited) @loader_path/../Frameworks @executable_path/../Frameworks),
72
+ 'COMBINE_HIDPI_IMAGES' => 'YES'
73
+ }.freeze,
74
+ [:tvos, :application] => {
75
+ 'LD_RUNPATH_SEARCH_PATHS' => %w($(inherited) @executable_path/Frameworks)
76
+ }.freeze,
77
+ [:tvos, :unit_test_bundle] => {
78
+ 'TEST_HOST' => "$(BUILT_PRODUCTS_DIR)/#{project.app_target.name}.app/#{project.app_target.name}"
79
+ }.freeze
80
+ }.freeze
81
+ settings(target_settings, options)
82
+ end
83
+ end
84
+ end