lib/dsl.rb in ambient-xcode-0.5.1 vs lib/dsl.rb in ambient-xcode-0.6.0
- old
+ new
@@ -4,10 +4,84 @@
def option(name, value)
Ambient.configure { set_option(name, value) }
end
+def base_ios_settings!(project_name, prefix: "", tests: false, ui_tests: false, swift: true, target: nil, test_target: nil, ui_test_target: nil)
+ use_defaults_for_everything_not_specified_in_this_file!
+ enable_default_warnings!
+
+ target ||= "project_name"
+ test_target ||= "#{project_name}Tests"
+ ui_test_target ||= "#{project_name}UITests"
+ tests = true if test_target
+ ui_tests = true if ui_test_target
+
+ option "ALWAYS_SEARCH_USER_PATHS", false
+ option "CLANG_CXX_LANGUAGE_STANDARD", "gnu++0x"
+ option "CLANG_CXX_LIBRARY", "libc++"
+ option "CLANG_ENABLE_MODULES", true
+ option "CLANG_ENABLE_OBJC_ARC", true
+
+ option "CODE_SIGN_IDENTITY[sdk=iphoneos*]", "iPhone Developer"
+ option "COPY_PHASE_STRIP", false
+
+ option "ENABLE_STRICT_OBJC_MSGSEND", true
+ option "GCC_C_LANGUAGE_STANDARD", "gnu99"
+ option "GCC_NO_COMMON_BLOCKS", true
+ option "SDKROOT", "iphoneos"
+ option "IPHONEOS_DEPLOYMENT_TARGET", "9.0"
+
+ scheme "Debug" do
+ option "DEBUG_INFORMATION_FORMAT", "dwarf"
+ option "ENABLE_TESTABILITY", true
+ option "MTL_ENABLE_DEBUG_INFO", true
+ option "ONLY_ACTIVE_ARCH", true
+ option "GCC_DYNAMIC_NO_PIC", false
+ option "GCC_OPTIMIZATION_LEVEL", "0"
+ option "GCC_PREPROCESSOR_DEFINITIONS", ["DEBUG=1", "$(inherited)"]
+ option "SWIFT_OPTIMIZATION_LEVEL", "-Onone" if swift
+ end
+
+ scheme "Release" do
+ option "DEBUG_INFORMATION_FORMAT", "dwarf-with-dsym"
+ option "ENABLE_NS_ASSERTIONS", false
+ option "MTL_ENABLE_DEBUG_INFO", false
+ option "VALIDATE_PRODUCT", true
+ end
+
+ target project_name do
+ option "INFOPLIST_FILE", "#{project_name}/Info.plist"
+ option "PRODUCT_BUNDLE_IDENTIFIER", "#{prefix}#{project_name}"
+ option "ASSETCATALOG_COMPILER_APPICON_NAME", "AppIcon"
+ option "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks"
+ option "PRODUCT_NAME", "$(TARGET_NAME)"
+ end
+
+ if tests
+ target test_target do
+ option "INFOPLIST_FILE", "#{project_name}Tests/Info.plist"
+ option "BUNDLE_LOADER", "$(TEST_HOST)"
+ option "TEST_HOST", "$(BUILT_PRODUCTS_DIR)/#{project_name}.app/#{project_name}"
+ option "PRODUCT_BUNDLE_IDENTIFIER", "#{prefix}#{project_name}Tests"
+ option "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"
+ option "PRODUCT_NAME", "$(TARGET_NAME)"
+ end
+ end
+
+ if ui_tests
+ target ui_test_target do
+ option "INFOPLIST_FILE", "#{project_name}UITests/Info.plist"
+ option "TEST_TARGET_NAME", "#{project_name}"
+ option "PRODUCT_BUNDLE_IDENTIFIER", "#{prefix}#{project_name}UITests"
+ option "LD_RUNPATH_SEARCH_PATHS", "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"
+ option "USES_XCTRUNNER", "YES"
+ option "PRODUCT_NAME", "$(TARGET_NAME)"
+ end
+ end
+end
+
def enable_extra_warnings_and_static_analyser!
warnings = %w(GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED
GCC_WARN_MISSING_PARENTHESES
GCC_WARN_ABOUT_RETURN_TYPE
GCC_WARN_SIGN_COMPARE
@@ -65,9 +139,29 @@
Ambient.configure { @use_defaults = true }
end
def scheme(name, parent: nil, &block)
SchemeScope.new(nil, name, parent).configure(&block)
+end
+
+def plist(path, &block)
+ PlistScope.new(path).configure(&block)
+end
+
+class PlistScope
+ attr_reader :helper
+
+ def initialize(path)
+ @helper = PlistHelper.new(path)
+ end
+
+ def configure(&block)
+ instance_eval(&block)
+ end
+
+ def entry(key, value)
+ helper.add_entry(key, value)
+ end
end
class TargetScope
attr_reader :name