From 40370d6bc7b276a1ea201eed530ea1301a1fac08 Mon Sep 17 00:00:00 2001 From: Maciej Piotrowski Date: Mon, 31 Aug 2020 16:16:44 +0200 Subject: [PATCH 1/7] Adjusts `R.swift` to include a resource bundle in the `R.generated.swift` file. --- Sources/RswiftCore/CallInformation.swift | 6 ++++++ Sources/RswiftCore/RswiftCore.swift | 6 +++--- Sources/RswiftCore/Util/Struct+InternalProperties.swift | 8 ++++++-- Sources/rswift/main.swift | 8 ++++++-- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Sources/RswiftCore/CallInformation.swift b/Sources/RswiftCore/CallInformation.swift index 3fa8121c..a444327a 100644 --- a/Sources/RswiftCore/CallInformation.swift +++ b/Sources/RswiftCore/CallInformation.swift @@ -23,6 +23,8 @@ public struct CallInformation { let targetName: String let bundleIdentifier: String let productModuleName: String + let resourceBundleName: String + let resourceBundleTargetName: String let infoPlistFile: URL let codeSignEntitlements: URL? @@ -49,6 +51,8 @@ public struct CallInformation { targetName: String, bundleIdentifier: String, productModuleName: String, + resourceBundleName: String, + resourceBundleTargetName: String, infoPlistFile: URL, codeSignEntitlements: URL?, @@ -74,6 +78,8 @@ public struct CallInformation { self.targetName = targetName self.bundleIdentifier = bundleIdentifier self.productModuleName = productModuleName + self.resourceBundleName = resourceBundleName + self.resourceBundleTargetName = resourceBundleTargetName self.infoPlistFile = infoPlistFile self.codeSignEntitlements = codeSignEntitlements diff --git a/Sources/RswiftCore/RswiftCore.swift b/Sources/RswiftCore/RswiftCore.swift index c5ff6190..d37d952d 100644 --- a/Sources/RswiftCore/RswiftCore.swift +++ b/Sources/RswiftCore/RswiftCore.swift @@ -39,8 +39,8 @@ public struct RswiftCore { let ignoreFile = (try? IgnoreFile(ignoreFileURL: callInformation.rswiftIgnoreURL)) ?? IgnoreFile() let buildConfigurations = try xcodeproj.buildConfigurations(forTarget: callInformation.targetName) - - let resourceURLs = try xcodeproj.resourcePaths(forTarget: callInformation.targetName) + let target = !callInformation.resourceBundleTargetName.isEmpty ? callInformation.resourceBundleTargetName : callInformation.targetName + let resourceURLs = try xcodeproj.resourcePaths(forTarget: target) .map { path in path.url(with: callInformation.urlForSourceTreeFolder) } .compactMap { $0 } .filter { !ignoreFile.matches(url: $0) } @@ -130,7 +130,7 @@ public struct RswiftCore { let (externalStructWithoutProperties, internalStruct) = ValidatedStructGenerator(validationSubject: aggregatedResult) .generatedStructs(at: callInformation.accessLevel, prefix: "") - let externalStruct = externalStructWithoutProperties.addingInternalProperties(forBundleIdentifier: callInformation.bundleIdentifier) + let externalStruct = externalStructWithoutProperties.addingInternalProperties(forBundleIdentifier: callInformation.bundleIdentifier, withEmbeddedResourceBundle: callInformation.resourceBundleName) let codeConvertibles: [SwiftCodeConverible?] = [ HeaderPrinter(), diff --git a/Sources/RswiftCore/Util/Struct+InternalProperties.swift b/Sources/RswiftCore/Util/Struct+InternalProperties.swift index 0d9f604e..ae5d7536 100644 --- a/Sources/RswiftCore/Util/Struct+InternalProperties.swift +++ b/Sources/RswiftCore/Util/Struct+InternalProperties.swift @@ -9,7 +9,11 @@ import Foundation extension Struct { - func addingInternalProperties(forBundleIdentifier bundleIdentifier: String) -> Struct { + func addingInternalProperties(forBundleIdentifier bundleIdentifier: String, withEmbeddedResourceBundle resourceBundleName: String) -> Struct { + var hostingBundleValue = "Bundle(for: R.Class.self)" + if !resourceBundleName.isEmpty { + hostingBundleValue = "Bundle(for: R.Class.self).path(forResource: \"\(resourceBundleName)\", ofType: \"bundle\").flatMap(Bundle.init(path:)) ?? Bundle(for: R.Class.self)" + } let internalProperties = [ Let( @@ -18,7 +22,7 @@ extension Struct { isStatic: true, name: "hostingBundle", typeDefinition: .inferred(Type._Bundle), - value: "Bundle(for: R.Class.self)"), + value: hostingBundleValue), Let( comments: [], accessModifier: .filePrivate, diff --git a/Sources/rswift/main.swift b/Sources/rswift/main.swift index b2eb42a0..29a13eab 100644 --- a/Sources/rswift/main.swift +++ b/Sources/rswift/main.swift @@ -49,7 +49,8 @@ struct EnvironmentKeys { static let xcodeproj = "PROJECT_FILE_PATH" static let infoPlistFile = "INFOPLIST_FILE" static let codeSignEntitlements = "CODE_SIGN_ENTITLEMENTS" - + static let resourceBundleName = "RESOURCE_BUNDLE_NAME" + static let resourceBundleTargetName = "RESOURCE_BUNDLE_TARGET_NAME" static let buildProductsDir = SourceTreeFolder.buildProductsDir.rawValue static let developerDir = SourceTreeFolder.developerDir.rawValue static let platformDir = SourceTreeFolder.platformDir.rawValue @@ -125,6 +126,8 @@ let generate = command( let targetName = try processInfo.environmentVariable(name: EnvironmentKeys.target) let bundleIdentifier = try processInfo.environmentVariable(name: EnvironmentKeys.bundleIdentifier) let productModuleName = try processInfo.environmentVariable(name: EnvironmentKeys.productModuleName) + let resourceBundleName = try processInfo.environmentVariable(name: EnvironmentKeys.resourceBundleName) + let resourceBundleTargetName = try processInfo.environmentVariable(name: EnvironmentKeys.resourceBundleTargetName) let infoPlistFile = try processInfo.environmentVariable(name: EnvironmentKeys.infoPlistFile) let codeSignEntitlements = processInfo.environment[EnvironmentKeys.codeSignEntitlements] @@ -207,9 +210,10 @@ let generate = command( targetName: targetName, bundleIdentifier: bundleIdentifier, productModuleName: productModuleName, + resourceBundleName: resourceBundleName, + resourceBundleTargetName: resourceBundleTargetName, infoPlistFile: URL(fileURLWithPath: infoPlistFile), codeSignEntitlements: codeSignEntitlements.map { URL(fileURLWithPath: $0) }, - scriptInputFiles: scriptInputFiles, scriptOutputFiles: scriptOutputFiles, lastRunURL: lastRunURL, From 5b53307ca951ef40b78c285343fcb9bec3da4813 Mon Sep 17 00:00:00 2001 From: paciej00 Date: Thu, 15 Oct 2020 18:37:25 +0200 Subject: [PATCH 2/7] Uses an optional hosting bundle name passed as `HOSTING_BUNDLE_NAME` environment variable --- Sources/RswiftCore/CallInformation.swift | 10 +++------- Sources/RswiftCore/RswiftCore.swift | 7 ++++--- .../RswiftCore/Util/Struct+InternalProperties.swift | 7 +++---- Sources/rswift/main.swift | 11 +++++------ 4 files changed, 15 insertions(+), 20 deletions(-) diff --git a/Sources/RswiftCore/CallInformation.swift b/Sources/RswiftCore/CallInformation.swift index a444327a..f8afc169 100644 --- a/Sources/RswiftCore/CallInformation.swift +++ b/Sources/RswiftCore/CallInformation.swift @@ -23,11 +23,9 @@ public struct CallInformation { let targetName: String let bundleIdentifier: String let productModuleName: String - let resourceBundleName: String - let resourceBundleTargetName: String + let hostingBundleName: String? let infoPlistFile: URL let codeSignEntitlements: URL? - let scriptInputFiles: [String] let scriptOutputFiles: [String] let lastRunURL: URL @@ -51,8 +49,7 @@ public struct CallInformation { targetName: String, bundleIdentifier: String, productModuleName: String, - resourceBundleName: String, - resourceBundleTargetName: String, + hostingBundleName: String?, infoPlistFile: URL, codeSignEntitlements: URL?, @@ -78,8 +75,7 @@ public struct CallInformation { self.targetName = targetName self.bundleIdentifier = bundleIdentifier self.productModuleName = productModuleName - self.resourceBundleName = resourceBundleName - self.resourceBundleTargetName = resourceBundleTargetName + self.hostingBundleName = hostingBundleName self.infoPlistFile = infoPlistFile self.codeSignEntitlements = codeSignEntitlements diff --git a/Sources/RswiftCore/RswiftCore.swift b/Sources/RswiftCore/RswiftCore.swift index d37d952d..fa1876b4 100644 --- a/Sources/RswiftCore/RswiftCore.swift +++ b/Sources/RswiftCore/RswiftCore.swift @@ -39,8 +39,8 @@ public struct RswiftCore { let ignoreFile = (try? IgnoreFile(ignoreFileURL: callInformation.rswiftIgnoreURL)) ?? IgnoreFile() let buildConfigurations = try xcodeproj.buildConfigurations(forTarget: callInformation.targetName) - let target = !callInformation.resourceBundleTargetName.isEmpty ? callInformation.resourceBundleTargetName : callInformation.targetName - let resourceURLs = try xcodeproj.resourcePaths(forTarget: target) + + let resourceURLs = try xcodeproj.resourcePaths(forTarget: callInformation.targetName) .map { path in path.url(with: callInformation.urlForSourceTreeFolder) } .compactMap { $0 } .filter { !ignoreFile.matches(url: $0) } @@ -130,7 +130,8 @@ public struct RswiftCore { let (externalStructWithoutProperties, internalStruct) = ValidatedStructGenerator(validationSubject: aggregatedResult) .generatedStructs(at: callInformation.accessLevel, prefix: "") - let externalStruct = externalStructWithoutProperties.addingInternalProperties(forBundleIdentifier: callInformation.bundleIdentifier, withEmbeddedResourceBundle: callInformation.resourceBundleName) + let externalStruct = externalStructWithoutProperties.addingInternalProperties(forBundleIdentifier: callInformation.bundleIdentifier, + hostingBundleName: callInformation.hostingBundleName) let codeConvertibles: [SwiftCodeConverible?] = [ HeaderPrinter(), diff --git a/Sources/RswiftCore/Util/Struct+InternalProperties.swift b/Sources/RswiftCore/Util/Struct+InternalProperties.swift index ae5d7536..b9b73e61 100644 --- a/Sources/RswiftCore/Util/Struct+InternalProperties.swift +++ b/Sources/RswiftCore/Util/Struct+InternalProperties.swift @@ -9,12 +9,11 @@ import Foundation extension Struct { - func addingInternalProperties(forBundleIdentifier bundleIdentifier: String, withEmbeddedResourceBundle resourceBundleName: String) -> Struct { + func addingInternalProperties(forBundleIdentifier bundleIdentifier: String, hostingBundleName: String? = nil) -> Struct { var hostingBundleValue = "Bundle(for: R.Class.self)" - if !resourceBundleName.isEmpty { - hostingBundleValue = "Bundle(for: R.Class.self).path(forResource: \"\(resourceBundleName)\", ofType: \"bundle\").flatMap(Bundle.init(path:)) ?? Bundle(for: R.Class.self)" + if let bundleName = hostingBundleName, !bundleName.isEmpty { + hostingBundleValue = "Bundle(for: R.Class.self).path(forResource: \"\(bundleName)\", ofType: \"bundle\").flatMap(Bundle.init(path:)) ?? Bundle(for: R.Class.self)" } - let internalProperties = [ Let( comments: [], diff --git a/Sources/rswift/main.swift b/Sources/rswift/main.swift index 29a13eab..14e5359d 100644 --- a/Sources/rswift/main.swift +++ b/Sources/rswift/main.swift @@ -42,6 +42,7 @@ struct CommanderFlags { struct EnvironmentKeys { static let bundleIdentifier = "PRODUCT_BUNDLE_IDENTIFIER" static let productModuleName = "PRODUCT_MODULE_NAME" + static let hostingBundleName = "HOSTING_BUNDLE_NAME" static let scriptInputFileCount = "SCRIPT_INPUT_FILE_COUNT" static let scriptOutputFileCount = "SCRIPT_OUTPUT_FILE_COUNT" static let target = "TARGET_NAME" @@ -49,8 +50,7 @@ struct EnvironmentKeys { static let xcodeproj = "PROJECT_FILE_PATH" static let infoPlistFile = "INFOPLIST_FILE" static let codeSignEntitlements = "CODE_SIGN_ENTITLEMENTS" - static let resourceBundleName = "RESOURCE_BUNDLE_NAME" - static let resourceBundleTargetName = "RESOURCE_BUNDLE_TARGET_NAME" + static let buildProductsDir = SourceTreeFolder.buildProductsDir.rawValue static let developerDir = SourceTreeFolder.developerDir.rawValue static let platformDir = SourceTreeFolder.platformDir.rawValue @@ -126,8 +126,7 @@ let generate = command( let targetName = try processInfo.environmentVariable(name: EnvironmentKeys.target) let bundleIdentifier = try processInfo.environmentVariable(name: EnvironmentKeys.bundleIdentifier) let productModuleName = try processInfo.environmentVariable(name: EnvironmentKeys.productModuleName) - let resourceBundleName = try processInfo.environmentVariable(name: EnvironmentKeys.resourceBundleName) - let resourceBundleTargetName = try processInfo.environmentVariable(name: EnvironmentKeys.resourceBundleTargetName) + let hostingBundleName: String? = try? processInfo.environmentVariable(name: EnvironmentKeys.hostingBundleName) let infoPlistFile = try processInfo.environmentVariable(name: EnvironmentKeys.infoPlistFile) let codeSignEntitlements = processInfo.environment[EnvironmentKeys.codeSignEntitlements] @@ -210,10 +209,10 @@ let generate = command( targetName: targetName, bundleIdentifier: bundleIdentifier, productModuleName: productModuleName, - resourceBundleName: resourceBundleName, - resourceBundleTargetName: resourceBundleTargetName, + hostingBundleName: hostingBundleName, infoPlistFile: URL(fileURLWithPath: infoPlistFile), codeSignEntitlements: codeSignEntitlements.map { URL(fileURLWithPath: $0) }, + scriptInputFiles: scriptInputFiles, scriptOutputFiles: scriptOutputFiles, lastRunURL: lastRunURL, From 454cd7569aff268679b607f6a1d8cd61ac8f329e Mon Sep 17 00:00:00 2001 From: paciej00 Date: Mon, 4 Jan 2021 18:34:08 +0100 Subject: [PATCH 3/7] Adds example project --- Examples/Podfile | 18 + Examples/Podfile.lock | 2 +- .../ResourceApp.xcodeproj/project.pbxproj | 4 +- .../App/Info.plist | 66 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 ++ .../Resources/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../App/Resources/Base.lproj/Main.storyboard | 55 + .../App/Sources/AppDelegate.swift | 14 + .../App/Sources/SceneDelegate.swift | 52 + .../App/Sources/ViewController.swift | 15 + .../Bar/Info.plist | 22 + .../Bar/Resources/Colors@3x.jpg | Bin 0 -> 28336 bytes .../Bar/Sources/Bar.swift | 12 + .../Foo/Info.plist | 22 + .../Foo/Resources/User.png | Bin 0 -> 5070 bytes .../Foo/Sources/Foo.swift | 12 + .../project.pbxproj | 1029 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../copy_bundles.sh | 10 + .../RswiftAppWithStaticFrameworks/project.yml | 87 ++ .../contents.xcworkspacedata | 3 + .../RwatchApp.xcodeproj/project.pbxproj | 2 +- ...esourceApp-watchOS (Notification).xcscheme | 25 +- .../xcschemes/ResourceApp-watchOS.xcscheme | 25 +- 27 files changed, 1614 insertions(+), 16 deletions(-) create mode 100644 Examples/RswiftAppWithStaticFrameworks/App/Info.plist create mode 100644 Examples/RswiftAppWithStaticFrameworks/App/Resources/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Examples/RswiftAppWithStaticFrameworks/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Examples/RswiftAppWithStaticFrameworks/App/Resources/Assets.xcassets/Contents.json create mode 100644 Examples/RswiftAppWithStaticFrameworks/App/Resources/Base.lproj/LaunchScreen.storyboard create mode 100644 Examples/RswiftAppWithStaticFrameworks/App/Resources/Base.lproj/Main.storyboard create mode 100644 Examples/RswiftAppWithStaticFrameworks/App/Sources/AppDelegate.swift create mode 100644 Examples/RswiftAppWithStaticFrameworks/App/Sources/SceneDelegate.swift create mode 100644 Examples/RswiftAppWithStaticFrameworks/App/Sources/ViewController.swift create mode 100644 Examples/RswiftAppWithStaticFrameworks/Bar/Info.plist create mode 100644 Examples/RswiftAppWithStaticFrameworks/Bar/Resources/Colors@3x.jpg create mode 100644 Examples/RswiftAppWithStaticFrameworks/Bar/Sources/Bar.swift create mode 100644 Examples/RswiftAppWithStaticFrameworks/Foo/Info.plist create mode 100644 Examples/RswiftAppWithStaticFrameworks/Foo/Resources/User.png create mode 100644 Examples/RswiftAppWithStaticFrameworks/Foo/Sources/Foo.swift create mode 100644 Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.pbxproj create mode 100644 Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100755 Examples/RswiftAppWithStaticFrameworks/copy_bundles.sh create mode 100644 Examples/RswiftAppWithStaticFrameworks/project.yml diff --git a/Examples/Podfile b/Examples/Podfile index a332fba4..700c58a6 100644 --- a/Examples/Podfile +++ b/Examples/Podfile @@ -30,3 +30,21 @@ target 'ResourceApp-watchOS-Extension' do rswiftlib end + +target 'App' do + platform :ios, '14.0' + project 'RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks' + rswiftlib +end + +target 'Foo' do + platform :ios, '14.0' + project 'RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks' + rswiftlib +end + +target 'Bar' do + platform :ios, '14.0' + project 'RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks' + rswiftlib +end diff --git a/Examples/Podfile.lock b/Examples/Podfile.lock index 53f09b72..f851f3ca 100644 --- a/Examples/Podfile.lock +++ b/Examples/Podfile.lock @@ -23,6 +23,6 @@ SPEC CHECKSUMS: R.swift.Library: 5ba4f1631300caf9a4d890186930da85d540769d SWRevealViewController: 6d3fd97f70112fd7cef9de14df4260eacce4c63a -PODFILE CHECKSUM: f469d71063f69d445c904540c317082849a4d112 +PODFILE CHECKSUM: 9ec20617b14d9852e3692e3fc8e47cdda4abbb32 COCOAPODS: 1.10.0 diff --git a/Examples/ResourceApp/ResourceApp.xcodeproj/project.pbxproj b/Examples/ResourceApp/ResourceApp.xcodeproj/project.pbxproj index 571191da..2e578199 100644 --- a/Examples/ResourceApp/ResourceApp.xcodeproj/project.pbxproj +++ b/Examples/ResourceApp/ResourceApp.xcodeproj/project.pbxproj @@ -662,7 +662,7 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-ResourceAppTests/Pods-ResourceAppTests-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/R.swift.Library-iOS/Rswift.framework", + "${BUILT_PRODUCTS_DIR}/R.swift.Library-iOS9.0/Rswift.framework", "${BUILT_PRODUCTS_DIR}/SWRevealViewController/SWRevealViewController.framework", ); name = "[CP] Embed Pods Frameworks"; @@ -682,7 +682,7 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-ResourceApp/Pods-ResourceApp-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/R.swift.Library-iOS/Rswift.framework", + "${BUILT_PRODUCTS_DIR}/R.swift.Library-iOS9.0/Rswift.framework", "${BUILT_PRODUCTS_DIR}/SWRevealViewController/SWRevealViewController.framework", ); name = "[CP] Embed Pods Frameworks"; diff --git a/Examples/RswiftAppWithStaticFrameworks/App/Info.plist b/Examples/RswiftAppWithStaticFrameworks/App/Info.plist new file mode 100644 index 00000000..5b531f7b --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/App/Info.plist @@ -0,0 +1,66 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Examples/RswiftAppWithStaticFrameworks/App/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/Examples/RswiftAppWithStaticFrameworks/App/Resources/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000..eb878970 --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/App/Resources/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/RswiftAppWithStaticFrameworks/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Examples/RswiftAppWithStaticFrameworks/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..9221b9bb --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/RswiftAppWithStaticFrameworks/App/Resources/Assets.xcassets/Contents.json b/Examples/RswiftAppWithStaticFrameworks/App/Resources/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/App/Resources/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Examples/RswiftAppWithStaticFrameworks/App/Resources/Base.lproj/LaunchScreen.storyboard b/Examples/RswiftAppWithStaticFrameworks/App/Resources/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..865e9329 --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/App/Resources/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/RswiftAppWithStaticFrameworks/App/Resources/Base.lproj/Main.storyboard b/Examples/RswiftAppWithStaticFrameworks/App/Resources/Base.lproj/Main.storyboard new file mode 100644 index 00000000..f26478a6 --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/App/Resources/Base.lproj/Main.storyboard @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/RswiftAppWithStaticFrameworks/App/Sources/AppDelegate.swift b/Examples/RswiftAppWithStaticFrameworks/App/Sources/AppDelegate.swift new file mode 100644 index 00000000..290d2378 --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/App/Sources/AppDelegate.swift @@ -0,0 +1,14 @@ +import UIKit +import Foo +import Bar + +@main +final class AppDelegate: UIResponder, UIApplicationDelegate { + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + FooClass().foo() + BarClass().bar() + return true + } + +} diff --git a/Examples/RswiftAppWithStaticFrameworks/App/Sources/SceneDelegate.swift b/Examples/RswiftAppWithStaticFrameworks/App/Sources/SceneDelegate.swift new file mode 100644 index 00000000..1cb72025 --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/App/Sources/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// FooBar +// +// Created by Maciej Piotrowski on 04/01/2021. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/Examples/RswiftAppWithStaticFrameworks/App/Sources/ViewController.swift b/Examples/RswiftAppWithStaticFrameworks/App/Sources/ViewController.swift new file mode 100644 index 00000000..ba532bb9 --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/App/Sources/ViewController.swift @@ -0,0 +1,15 @@ +import UIKit +import Foo +import Bar + +final class ViewController: UIViewController { + + @IBOutlet weak var fooImageView: UIImageView! + @IBOutlet weak var barImageView: UIImageView! + + override func viewDidLoad() { + super.viewDidLoad() + fooImageView.image = FooClass().sampleImage() + barImageView.image = BarClass().sampleImage() + } +} diff --git a/Examples/RswiftAppWithStaticFrameworks/Bar/Info.plist b/Examples/RswiftAppWithStaticFrameworks/Bar/Info.plist new file mode 100644 index 00000000..e1fe4cfb --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/Bar/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/Examples/RswiftAppWithStaticFrameworks/Bar/Resources/Colors@3x.jpg b/Examples/RswiftAppWithStaticFrameworks/Bar/Resources/Colors@3x.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23c056a8581dfff1ad1adfa27c4291bdf37449a6 GIT binary patch literal 28336 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 literal 0 HcmV?d00001 diff --git a/Examples/RswiftAppWithStaticFrameworks/Bar/Sources/Bar.swift b/Examples/RswiftAppWithStaticFrameworks/Bar/Sources/Bar.swift new file mode 100644 index 00000000..8376f421 --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/Bar/Sources/Bar.swift @@ -0,0 +1,12 @@ +import UIKit + +public final class BarClass { + public init() {} + public func bar() { + print("bar") + } + + public func sampleImage() -> UIImage { + R.image.colorsJpg()! + } +} diff --git a/Examples/RswiftAppWithStaticFrameworks/Foo/Info.plist b/Examples/RswiftAppWithStaticFrameworks/Foo/Info.plist new file mode 100644 index 00000000..e1fe4cfb --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/Foo/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/Examples/RswiftAppWithStaticFrameworks/Foo/Resources/User.png b/Examples/RswiftAppWithStaticFrameworks/Foo/Resources/User.png new file mode 100644 index 0000000000000000000000000000000000000000..4f5cafee93982371643703abbc14a488da172ea4 GIT binary patch literal 5070 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 of)hF*{}&XI{AYiR literal 0 HcmV?d00001 diff --git a/Examples/RswiftAppWithStaticFrameworks/Foo/Sources/Foo.swift b/Examples/RswiftAppWithStaticFrameworks/Foo/Sources/Foo.swift new file mode 100644 index 00000000..ac436df6 --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/Foo/Sources/Foo.swift @@ -0,0 +1,12 @@ +import UIKit + +public final class FooClass { + public init() {} + public func foo() { + print("foo") + } + + public func sampleImage() -> UIImage { + R.image.user()! + } +} diff --git a/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.pbxproj b/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.pbxproj new file mode 100644 index 00000000..f6d989f8 --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.pbxproj @@ -0,0 +1,1029 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 51; + objects = { + +/* Begin PBXBuildFile section */ + 03D06D9C60AEAE8FE634454D /* Pods_Bar.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 674E867D044E13C4EE824EDA /* Pods_Bar.framework */; }; + 23D0DE433EC1766BB2FE59C6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3844C19EF2D85F958F010218 /* Assets.xcassets */; }; + 37A6C8B54F86BE2228F892B5 /* Foo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71F7B7842FB9EF2B65125CA8 /* Foo.framework */; }; + 3961A1FF3CCC8D319B5B9851 /* Pods_Foo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 101FB5471EED7CE7F1DECEB5 /* Pods_Foo.framework */; }; + 4680E921FB7046245B234C95 /* FooBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 47FFEF3E3191F365876C33B1 /* FooBundle.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 50D25F3E8DE46F91123C0CC5 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C0B0FCA09D48FF877E95970 /* ViewController.swift */; }; + 637C842A03EE4A0AED304ECF /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9767D4BABC42FE700C878635 /* Pods_App.framework */; }; + A025843A2D354BB0B413A717 /* R.generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = D003AB83A00F5D1B9A9F9B90 /* R.generated.swift */; }; + A14D88A4A3403DACF2DC2ECF /* R.generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7750863E11F70C8B71F811A /* R.generated.swift */; }; + A7940548A881305B7778FC55 /* Bar.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F77580EFDC1015090A2B822 /* Bar.framework */; }; + A9A2E8F57CA32D93229A2462 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9D52D56702E90AADBC46B4EB /* LaunchScreen.storyboard */; }; + B237F040341B112E7909766C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6ED7964632BE36BB21735A9 /* AppDelegate.swift */; }; + B2AF344DDA24E5AE91D9D3B1 /* User.png in Resources */ = {isa = PBXBuildFile; fileRef = A51DA98728043B2D10ECA1B3 /* User.png */; }; + C035B4491A5A10E08C72F4D4 /* Foo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C541BB310FEB70B665E8E397 /* Foo.swift */; }; + C6170449030C8F20798DFC3F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DBD12E6769ED8625AC7210E6 /* Main.storyboard */; }; + D80E585DBD9FA2E07EB14DA2 /* BarBundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F1DD55F25DE874A0AA75B238 /* BarBundle.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + DD2203C09F7FD1ECB305B8C2 /* Colors@3x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 655641603F257DD75189A0F6 /* Colors@3x.jpg */; }; + DD544B6A13EA12A2EFF14EE3 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2241208CE1C221B1E493B1CA /* SceneDelegate.swift */; }; + F8DB9C27FD3259718C746DBA /* Bar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA3FBEC5BB6C4FE0CF1A43A /* Bar.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 1DFDF5BED3E06260DD0983D2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C88653A8855B27A3CA0F5055 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8F2521905D0CF087FFD375B3; + remoteInfo = BarBundle; + }; + 4148B3991FED2CFF64E2BFB4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C88653A8855B27A3CA0F5055 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0328DD4A87BE56889AA0F781; + remoteInfo = Bar; + }; + 803498BC9B607C125AE5E616 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C88653A8855B27A3CA0F5055 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 59A219B1BF6C52119E76405D; + remoteInfo = Foo; + }; + C9A1FDF0190D9DA54DB7D4B0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C88653A8855B27A3CA0F5055 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8B28E1AAD3ADDC6347204D85; + remoteInfo = FooBundle; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 09EBE6C782F6AFDFAAAB82E4 /* App.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 101FB5471EED7CE7F1DECEB5 /* Pods_Foo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Foo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2241208CE1C221B1E493B1CA /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 2DA3FBEC5BB6C4FE0CF1A43A /* Bar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bar.swift; sourceTree = ""; }; + 3844C19EF2D85F958F010218 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 47FFEF3E3191F365876C33B1 /* FooBundle.bundle */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.plug-in"; name = FooBundle.bundle; path = Foo.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 655641603F257DD75189A0F6 /* Colors@3x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "Colors@3x.jpg"; sourceTree = ""; }; + 65B047577B44066BF0F03323 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 674E867D044E13C4EE824EDA /* Pods_Bar.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Bar.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 71F7B7842FB9EF2B65125CA8 /* Foo.framework */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.framework; path = Foo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7A97E567FE57FF2A3594148E /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = ""; }; + 7C0B0FCA09D48FF877E95970 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 7F77580EFDC1015090A2B822 /* Bar.framework */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.framework; path = Bar.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 840352C90829575A1970A01D /* Pods-Bar.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Bar.debug.xcconfig"; path = "Target Support Files/Pods-Bar/Pods-Bar.debug.xcconfig"; sourceTree = ""; }; + 9767D4BABC42FE700C878635 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A51DA98728043B2D10ECA1B3 /* User.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = User.png; sourceTree = ""; }; + A9045BF2B54CD6F046235641 /* Pods-Foo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Foo.release.xcconfig"; path = "Target Support Files/Pods-Foo/Pods-Foo.release.xcconfig"; sourceTree = ""; }; + B25A6A55A5F88D2EC3BDAFC1 /* Pods-Bar.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Bar.release.xcconfig"; path = "Target Support Files/Pods-Bar/Pods-Bar.release.xcconfig"; sourceTree = ""; }; + B5D7765B6F9ED6E52E0C0E9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + C541BB310FEB70B665E8E397 /* Foo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Foo.swift; sourceTree = ""; }; + CCFC93145C8B40C96FC845E0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + D003AB83A00F5D1B9A9F9B90 /* R.generated.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = R.generated.swift; sourceTree = ""; }; + D207B45CD3D109D085B96B0B /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = ""; }; + E272249ACFD5997B05D8725B /* Pods-Foo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Foo.debug.xcconfig"; path = "Target Support Files/Pods-Foo/Pods-Foo.debug.xcconfig"; sourceTree = ""; }; + E6ED7964632BE36BB21735A9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + E7750863E11F70C8B71F811A /* R.generated.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = R.generated.swift; sourceTree = ""; }; + F1DD55F25DE874A0AA75B238 /* BarBundle.bundle */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.plug-in"; name = BarBundle.bundle; path = Bar.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0A731942ACBB4ECBC9AAB971 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 03D06D9C60AEAE8FE634454D /* Pods_Bar.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D2E9B6337E9A1F293CFEF1A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3961A1FF3CCC8D319B5B9851 /* Pods_Foo.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4579F2BF429599A2B22EF7E9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 37A6C8B54F86BE2228F892B5 /* Foo.framework in Frameworks */, + A7940548A881305B7778FC55 /* Bar.framework in Frameworks */, + 637C842A03EE4A0AED304ECF /* Pods_App.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A9E1015776CFBF373AD544CC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EDBDCA658D347C739094B5A8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 09954D985BD90D3535BA5E29 /* Bar */ = { + isa = PBXGroup; + children = ( + A2BED99BA03167AE6623D710 /* Resources */, + F0B54132DA7DE455F60E7A34 /* Sources */, + ); + path = Bar; + sourceTree = ""; + }; + 0E7FA1DDE8CBA9925A94C208 /* Pods */ = { + isa = PBXGroup; + children = ( + 7A97E567FE57FF2A3594148E /* Pods-App.debug.xcconfig */, + D207B45CD3D109D085B96B0B /* Pods-App.release.xcconfig */, + 840352C90829575A1970A01D /* Pods-Bar.debug.xcconfig */, + B25A6A55A5F88D2EC3BDAFC1 /* Pods-Bar.release.xcconfig */, + E272249ACFD5997B05D8725B /* Pods-Foo.debug.xcconfig */, + A9045BF2B54CD6F046235641 /* Pods-Foo.release.xcconfig */, + ); + name = Pods; + path = ../Pods; + sourceTree = ""; + }; + 370D29654D2F7D3ED5FF8790 /* App */ = { + isa = PBXGroup; + children = ( + CCFC93145C8B40C96FC845E0 /* Info.plist */, + 62CE76B9A9B4F9BD5021F441 /* Resources */, + 848C8ADB35C45933DBD38D2E /* Sources */, + ); + path = App; + sourceTree = ""; + }; + 582737745B10EC73FF0579D7 = { + isa = PBXGroup; + children = ( + 370D29654D2F7D3ED5FF8790 /* App */, + 09954D985BD90D3535BA5E29 /* Bar */, + C59E71F563315A14B3980DA2 /* Foo */, + F9DDB8B557D329344CC4A0CC /* Products */, + 0E7FA1DDE8CBA9925A94C208 /* Pods */, + DD1F0A6943FFE15626FADF47 /* Frameworks */, + ); + sourceTree = ""; + }; + 62CE76B9A9B4F9BD5021F441 /* Resources */ = { + isa = PBXGroup; + children = ( + 3844C19EF2D85F958F010218 /* Assets.xcassets */, + 9D52D56702E90AADBC46B4EB /* LaunchScreen.storyboard */, + DBD12E6769ED8625AC7210E6 /* Main.storyboard */, + ); + path = Resources; + sourceTree = ""; + }; + 82705CC060AFE6E95F5ADB07 /* Sources */ = { + isa = PBXGroup; + children = ( + C541BB310FEB70B665E8E397 /* Foo.swift */, + D003AB83A00F5D1B9A9F9B90 /* R.generated.swift */, + ); + path = Sources; + sourceTree = ""; + }; + 848C8ADB35C45933DBD38D2E /* Sources */ = { + isa = PBXGroup; + children = ( + E6ED7964632BE36BB21735A9 /* AppDelegate.swift */, + 2241208CE1C221B1E493B1CA /* SceneDelegate.swift */, + 7C0B0FCA09D48FF877E95970 /* ViewController.swift */, + ); + path = Sources; + sourceTree = ""; + }; + A2BED99BA03167AE6623D710 /* Resources */ = { + isa = PBXGroup; + children = ( + 655641603F257DD75189A0F6 /* Colors@3x.jpg */, + ); + path = Resources; + sourceTree = ""; + }; + AEBCA0D51F6A1C59A1517331 /* Resources */ = { + isa = PBXGroup; + children = ( + A51DA98728043B2D10ECA1B3 /* User.png */, + ); + path = Resources; + sourceTree = ""; + }; + C59E71F563315A14B3980DA2 /* Foo */ = { + isa = PBXGroup; + children = ( + AEBCA0D51F6A1C59A1517331 /* Resources */, + 82705CC060AFE6E95F5ADB07 /* Sources */, + ); + path = Foo; + sourceTree = ""; + }; + DD1F0A6943FFE15626FADF47 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 9767D4BABC42FE700C878635 /* Pods_App.framework */, + 674E867D044E13C4EE824EDA /* Pods_Bar.framework */, + 101FB5471EED7CE7F1DECEB5 /* Pods_Foo.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + F0B54132DA7DE455F60E7A34 /* Sources */ = { + isa = PBXGroup; + children = ( + 2DA3FBEC5BB6C4FE0CF1A43A /* Bar.swift */, + E7750863E11F70C8B71F811A /* R.generated.swift */, + ); + path = Sources; + sourceTree = ""; + }; + F9DDB8B557D329344CC4A0CC /* Products */ = { + isa = PBXGroup; + children = ( + 09EBE6C782F6AFDFAAAB82E4 /* App.app */, + 7F77580EFDC1015090A2B822 /* Bar.framework */, + F1DD55F25DE874A0AA75B238 /* BarBundle.bundle */, + 71F7B7842FB9EF2B65125CA8 /* Foo.framework */, + 47FFEF3E3191F365876C33B1 /* FooBundle.bundle */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 0328DD4A87BE56889AA0F781 /* Bar */ = { + isa = PBXNativeTarget; + buildConfigurationList = A0FB50A44CF6F3E23F1D04B0 /* Build configuration list for PBXNativeTarget "Bar" */; + buildPhases = ( + 4367A8857BCF8C025352CB3D /* [CP] Check Pods Manifest.lock */, + 0B3751134FEE9BB94D60B6B8 /* R.swift */, + 40C7251D6D0A826CD4FC20FF /* Sources */, + 2690BC128C6239F7341A0E1B /* Resources */, + 0A731942ACBB4ECBC9AAB971 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + DF0A2FBC262B99BDB95C08AD /* PBXTargetDependency */, + ); + name = Bar; + productName = Bar; + productReference = 7F77580EFDC1015090A2B822 /* Bar.framework */; + productType = "com.apple.product-type.framework.static"; + }; + 59A219B1BF6C52119E76405D /* Foo */ = { + isa = PBXNativeTarget; + buildConfigurationList = CB8E0D95C8221EB66322BB76 /* Build configuration list for PBXNativeTarget "Foo" */; + buildPhases = ( + 54B342B8F45B90A50273E7C3 /* [CP] Check Pods Manifest.lock */, + 77448D795985C19AF55A5F1F /* R.swift */, + 5D824023BAD1D687E5B2AD5F /* Sources */, + 641BD0BED6B86B8355FD746E /* Resources */, + 2D2E9B6337E9A1F293CFEF1A /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 47421C68E32922D308DC7D74 /* PBXTargetDependency */, + ); + name = Foo; + productName = Foo; + productReference = 71F7B7842FB9EF2B65125CA8 /* Foo.framework */; + productType = "com.apple.product-type.framework.static"; + }; + 8B28E1AAD3ADDC6347204D85 /* FooBundle */ = { + isa = PBXNativeTarget; + buildConfigurationList = C87CE7344FD89D4A4F49943C /* Build configuration list for PBXNativeTarget "FooBundle" */; + buildPhases = ( + 93F7254F4D2B16BE33DB2BDF /* Resources */, + EDBDCA658D347C739094B5A8 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = FooBundle; + productName = FooBundle; + productReference = 47FFEF3E3191F365876C33B1 /* FooBundle.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 8F2521905D0CF087FFD375B3 /* BarBundle */ = { + isa = PBXNativeTarget; + buildConfigurationList = DE89F2BC7BD62BB58420F5EC /* Build configuration list for PBXNativeTarget "BarBundle" */; + buildPhases = ( + F752C24D8952745834991833 /* Resources */, + A9E1015776CFBF373AD544CC /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = BarBundle; + productName = BarBundle; + productReference = F1DD55F25DE874A0AA75B238 /* BarBundle.bundle */; + productType = "com.apple.product-type.bundle"; + }; + E6815CC966750C0B4B8C0903 /* App */ = { + isa = PBXNativeTarget; + buildConfigurationList = B6DEF19BFDFDD330B369BBE8 /* Build configuration list for PBXNativeTarget "App" */; + buildPhases = ( + 795DD9FA56EF642DB2307F41 /* [CP] Check Pods Manifest.lock */, + ADE3A7C6DD9F273AC89B3ED5 /* Sources */, + BC9CC850DB0B3548EBDC9E7D /* Resources */, + 4579F2BF429599A2B22EF7E9 /* Frameworks */, + 7F553EDAB894541615C8EB2C /* Copy Bundles */, + 4213D882A02A85E88A6D8CA9 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 04CE573ED9492DE29603C7A4 /* PBXTargetDependency */, + 63408DB2AC810020287B7FD0 /* PBXTargetDependency */, + ); + name = App; + productName = App; + productReference = 09EBE6C782F6AFDFAAAB82E4 /* App.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + C88653A8855B27A3CA0F5055 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1200; + }; + buildConfigurationList = B0168AC1C5483CCEB3271728 /* Build configuration list for PBXProject "RswiftAppWithStaticFrameworks" */; + compatibilityVersion = "Xcode 10.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + en, + ); + mainGroup = 582737745B10EC73FF0579D7; + productRefGroup = F9DDB8B557D329344CC4A0CC /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + E6815CC966750C0B4B8C0903 /* App */, + 0328DD4A87BE56889AA0F781 /* Bar */, + 8F2521905D0CF087FFD375B3 /* BarBundle */, + 59A219B1BF6C52119E76405D /* Foo */, + 8B28E1AAD3ADDC6347204D85 /* FooBundle */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 2690BC128C6239F7341A0E1B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D80E585DBD9FA2E07EB14DA2 /* BarBundle.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 641BD0BED6B86B8355FD746E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4680E921FB7046245B234C95 /* FooBundle.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 93F7254F4D2B16BE33DB2BDF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B2AF344DDA24E5AE91D9D3B1 /* User.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BC9CC850DB0B3548EBDC9E7D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 23D0DE433EC1766BB2FE59C6 /* Assets.xcassets in Resources */, + A9A2E8F57CA32D93229A2462 /* LaunchScreen.storyboard in Resources */, + C6170449030C8F20798DFC3F /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F752C24D8952745834991833 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DD2203C09F7FD1ECB305B8C2 /* Colors@3x.jpg in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 0B3751134FEE9BB94D60B6B8 /* R.swift */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "$(TEMP_DIR)/rswift-lastrun", + ); + name = R.swift; + outputFileListPaths = ( + ); + outputPaths = ( + "$(SRCROOT)/Bar/Sources/R.generated.swift", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export HOSTING_BUNDLE_NAME=${PRODUCT_NAME}\nexport TARGET_NAME=${PRODUCT_NAME}Bundle\n\"$SRCROOT/../../.build/debug/rswift\" generate \"$SRCROOT/Bar/Sources/R.generated.swift\" > \"$SRCROOT/rswift.log\""; + }; + 4213D882A02A85E88A6D8CA9 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 4367A8857BCF8C025352CB3D /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Bar-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 54B342B8F45B90A50273E7C3 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Foo-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 77448D795985C19AF55A5F1F /* R.swift */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "$(TEMP_DIR)/rswift-lastrun", + ); + name = R.swift; + outputFileListPaths = ( + ); + outputPaths = ( + "$(SRCROOT)/Foo/Sources/R.generated.swift", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export HOSTING_BUNDLE_NAME=${PRODUCT_NAME}\nexport TARGET_NAME=${PRODUCT_NAME}Bundle\n\"$SRCROOT/../../.build/debug/rswift\" generate \"$SRCROOT/Foo/Sources/R.generated.swift\" > \"$SRCROOT/rswift.log\"\n"; + }; + 795DD9FA56EF642DB2307F41 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 7F553EDAB894541615C8EB2C /* Copy Bundles */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Copy Bundles"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = ./copy_bundles.sh; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 40C7251D6D0A826CD4FC20FF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F8DB9C27FD3259718C746DBA /* Bar.swift in Sources */, + A14D88A4A3403DACF2DC2ECF /* R.generated.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5D824023BAD1D687E5B2AD5F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C035B4491A5A10E08C72F4D4 /* Foo.swift in Sources */, + A025843A2D354BB0B413A717 /* R.generated.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ADE3A7C6DD9F273AC89B3ED5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B237F040341B112E7909766C /* AppDelegate.swift in Sources */, + DD544B6A13EA12A2EFF14EE3 /* SceneDelegate.swift in Sources */, + 50D25F3E8DE46F91123C0CC5 /* ViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 04CE573ED9492DE29603C7A4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 59A219B1BF6C52119E76405D /* Foo */; + targetProxy = 803498BC9B607C125AE5E616 /* PBXContainerItemProxy */; + }; + 47421C68E32922D308DC7D74 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8B28E1AAD3ADDC6347204D85 /* FooBundle */; + targetProxy = C9A1FDF0190D9DA54DB7D4B0 /* PBXContainerItemProxy */; + }; + 63408DB2AC810020287B7FD0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 0328DD4A87BE56889AA0F781 /* Bar */; + targetProxy = 4148B3991FED2CFF64E2BFB4 /* PBXContainerItemProxy */; + }; + DF0A2FBC262B99BDB95C08AD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8F2521905D0CF087FFD375B3 /* BarBundle */; + targetProxy = 1DFDF5BED3E06260DD0983D2 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 9D52D56702E90AADBC46B4EB /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 65B047577B44066BF0F03323 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; + DBD12E6769ED8625AC7210E6 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + B5D7765B6F9ED6E52E0C0E9A /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 34AE2C662C40B3A8D071F0F2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E272249ACFD5997B05D8725B /* Pods-Foo.debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Foo/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.rswift.$(PRODUCT_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 42F07A51D83C6D0157DE516F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B25A6A55A5F88D2EC3BDAFC1 /* Pods-Bar.release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Bar/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.rswift.$(PRODUCT_NAME:c99extidentifier)"; + PRODUCT_NAME = Bar; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 45F5BF9169D32C7AE87F0699 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = Foo/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MACH_O_TYPE = mh_bundle; + PRODUCT_BUNDLE_IDENTIFIER = "com.rswift.$(PRODUCT_NAME:c99extidentifier)"; + PRODUCT_NAME = Foo; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 66BAA81A15AA74DBDAA90FD6 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 840352C90829575A1970A01D /* Pods-Bar.debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Bar/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.rswift.$(PRODUCT_NAME:c99extidentifier)"; + PRODUCT_NAME = Bar; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 887AA668D7785BA542E846E0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = Bar/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MACH_O_TYPE = mh_bundle; + PRODUCT_BUNDLE_IDENTIFIER = "com.rswift.$(PRODUCT_NAME:c99extidentifier)"; + PRODUCT_NAME = Bar; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 8CD98AF60F03A3684AF41FF9 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D207B45CD3D109D085B96B0B /* Pods-App.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + INFOPLIST_FILE = App/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.rswift.$(PRODUCT_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 994E34063ABAC54789FA4C14 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 9F98089B10E355F2695FAD9A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = Bar/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MACH_O_TYPE = mh_bundle; + PRODUCT_BUNDLE_IDENTIFIER = "com.rswift.$(PRODUCT_NAME:c99extidentifier)"; + PRODUCT_NAME = Bar; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + B00C96695DF77912869D2A02 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = Foo/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MACH_O_TYPE = mh_bundle; + PRODUCT_BUNDLE_IDENTIFIER = "com.rswift.$(PRODUCT_NAME:c99extidentifier)"; + PRODUCT_NAME = Foo; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + B78B2DA0006A2053E8E8D15E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A9045BF2B54CD6F046235641 /* Pods-Foo.release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Foo/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.rswift.$(PRODUCT_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + E8315FC5728EA2DB95EEA61F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + FD856F4445F4086EFDE59CF8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7A97E567FE57FF2A3594148E /* Pods-App.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + INFOPLIST_FILE = App/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.rswift.$(PRODUCT_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + A0FB50A44CF6F3E23F1D04B0 /* Build configuration list for PBXNativeTarget "Bar" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 66BAA81A15AA74DBDAA90FD6 /* Debug */, + 42F07A51D83C6D0157DE516F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + B0168AC1C5483CCEB3271728 /* Build configuration list for PBXProject "RswiftAppWithStaticFrameworks" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E8315FC5728EA2DB95EEA61F /* Debug */, + 994E34063ABAC54789FA4C14 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + B6DEF19BFDFDD330B369BBE8 /* Build configuration list for PBXNativeTarget "App" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FD856F4445F4086EFDE59CF8 /* Debug */, + 8CD98AF60F03A3684AF41FF9 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + C87CE7344FD89D4A4F49943C /* Build configuration list for PBXNativeTarget "FooBundle" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B00C96695DF77912869D2A02 /* Debug */, + 45F5BF9169D32C7AE87F0699 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + CB8E0D95C8221EB66322BB76 /* Build configuration list for PBXNativeTarget "Foo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 34AE2C662C40B3A8D071F0F2 /* Debug */, + B78B2DA0006A2053E8E8D15E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DE89F2BC7BD62BB58420F5EC /* Build configuration list for PBXNativeTarget "BarBundle" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 887AA668D7785BA542E846E0 /* Debug */, + 9F98089B10E355F2695FAD9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = C88653A8855B27A3CA0F5055 /* Project object */; +} diff --git a/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..7526341e --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Examples/RswiftAppWithStaticFrameworks/copy_bundles.sh b/Examples/RswiftAppWithStaticFrameworks/copy_bundles.sh new file mode 100755 index 00000000..fd77b121 --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/copy_bundles.sh @@ -0,0 +1,10 @@ +#!/bin/sh +find "${BUILT_PRODUCTS_DIR}" -d 1 -name "*.framework" | while read framework + do + find -L "${framework}" -name "*.bundle" -d 1 | while read source + do + destination="${TARGET_BUILD_DIR}/${EXECUTABLE_FOLDER_PATH}" + rsync -auv "${source}" "${destination}" || exit 1 + done + done +exit 0 diff --git a/Examples/RswiftAppWithStaticFrameworks/project.yml b/Examples/RswiftAppWithStaticFrameworks/project.yml new file mode 100644 index 00000000..71643d5c --- /dev/null +++ b/Examples/RswiftAppWithStaticFrameworks/project.yml @@ -0,0 +1,87 @@ +#This is a manifest for .xcodeproj generation with https://github.com/yonaskolb/XcodeGen +name: RswiftAppWithStaticFrameworks +configs: + Debug: debug + Release: release +options: + postGenCommand: pod install +targets: + App: + type: application + platform: iOS + settings: + PRODUCT_BUNDLE_IDENTIFIER: com.rswift.$(PRODUCT_NAME:c99extidentifier) + sources: + - path: App + dependencies: + - target: Foo + - target: Bar + postbuildScripts: + - name: Copy Bundles + script: ./copy_bundles.sh + + Foo: + type: framework.static + platform: iOS + settings: + INFOPLIST_FILE: Foo/Info.plist + INSTALL_PATH: $(LOCAL_LIBRARY_DIR)/Frameworks + PRODUCT_BUNDLE_IDENTIFIER: com.rswift.$(PRODUCT_NAME:c99extidentifier) + sources: + - path: Foo/Sources + createIntermediateGroups: true + dependencies: + - target: FooBundle + embed: true + prebuildScripts: + - name: R.swift + script: "export HOSTING_BUNDLE_NAME=${PRODUCT_NAME}\nexport TARGET_NAME=${PRODUCT_NAME}Bundle\n\"$SRCROOT/../../.build/debug/rswift\" generate \"$SRCROOT/Foo/Sources/R.generated.swift\" > \"$SRCROOT/rswift.log\"" + inputFiles: + - $(TEMP_DIR)/rswift-lastrun + outputFiles: + - $(SRCROOT)/Foo/Sources/R.generated.swift + + FooBundle: + type: bundle + platform: iOS + settings: + MACH_O_TYPE: mh_bundle + INFOPLIST_FILE: Foo/Info.plist + PRODUCT_BUNDLE_IDENTIFIER: com.rswift.$(PRODUCT_NAME:c99extidentifier) + PRODUCT_NAME: Foo + sources: + - path: Foo/Resources + createIntermediateGroups: true + + Bar: + type: framework.static + platform: iOS + settings: + INFOPLIST_FILE: Bar/Info.plist + PRODUCT_BUNDLE_IDENTIFIER: com.rswift.$(PRODUCT_NAME:c99extidentifier) + PRODUCT_NAME: Bar + sources: + - path: Bar/Sources + createIntermediateGroups: true + dependencies: + - target: BarBundle + embed: true + prebuildScripts: + - name: R.swift + script: "export HOSTING_BUNDLE_NAME=${PRODUCT_NAME}\nexport TARGET_NAME=${PRODUCT_NAME}Bundle\n\"$SRCROOT/../../.build/debug/rswift\" generate \"$SRCROOT/Bar/Sources/R.generated.swift\" > \"$SRCROOT/rswift.log\"" + inputFiles: + - $(TEMP_DIR)/rswift-lastrun + outputFiles: + - $(SRCROOT)/Bar/Sources/R.generated.swift + + BarBundle: + type: bundle + platform: iOS + settings: + PRODUCT_BUNDLE_IDENTIFIER: com.rswift.$(PRODUCT_NAME:c99extidentifier) + MACH_O_TYPE: mh_bundle + INFOPLIST_FILE: Bar/Info.plist + PRODUCT_NAME: Bar + sources: + - path: Bar/Resources + createIntermediateGroups: true \ No newline at end of file diff --git a/Examples/RswiftExamples.xcworkspace/contents.xcworkspacedata b/Examples/RswiftExamples.xcworkspace/contents.xcworkspacedata index fa98579f..6fdcd242 100644 --- a/Examples/RswiftExamples.xcworkspace/contents.xcworkspacedata +++ b/Examples/RswiftExamples.xcworkspace/contents.xcworkspacedata @@ -13,6 +13,9 @@ + + diff --git a/Examples/RwatchApp/RwatchApp.xcodeproj/project.pbxproj b/Examples/RwatchApp/RwatchApp.xcodeproj/project.pbxproj index 9ecb3859..445b7b0e 100644 --- a/Examples/RwatchApp/RwatchApp.xcodeproj/project.pbxproj +++ b/Examples/RwatchApp/RwatchApp.xcodeproj/project.pbxproj @@ -315,7 +315,7 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-ResourceApp-watchOS-Extension/Pods-ResourceApp-watchOS-Extension-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/R.swift.Library-watchOS/Rswift.framework", + "${BUILT_PRODUCTS_DIR}/R.swift.Library-watchOS2.2/Rswift.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( diff --git a/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS (Notification).xcscheme b/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS (Notification).xcscheme index 7188537e..b1e372c2 100644 --- a/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS (Notification).xcscheme +++ b/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS (Notification).xcscheme @@ -41,8 +41,10 @@ debugServiceExtension = "internal" allowLocationSimulation = "YES" launchAutomaticallySubstyle = "8"> - + - + - + - + + + + + diff --git a/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS.xcscheme b/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS.xcscheme index 2075d6fb..4223881f 100644 --- a/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS.xcscheme +++ b/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS.xcscheme @@ -41,8 +41,10 @@ debugServiceExtension = "internal" allowLocationSimulation = "YES" notificationPayloadFile = "ResourceApp-watchOS-Extension/PushNotificationPayload.apns"> - + - + - + - + + + + + From ea38ef6ad1be112b8de1a650b163e6c0f755a283 Mon Sep 17 00:00:00 2001 From: Maciej Piotrowski Date: Tue, 30 Nov 2021 14:59:23 +0100 Subject: [PATCH 4/7] Fixes compilation --- Sources/rswift/main.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Sources/rswift/main.swift b/Sources/rswift/main.swift index bdf89aef..2cd7ba5b 100644 --- a/Sources/rswift/main.swift +++ b/Sources/rswift/main.swift @@ -192,6 +192,7 @@ let generate = command( CommanderOptions.target, CommanderOptions.bundleIdentifier, CommanderOptions.productModuleName, + CommanderOptions.hostingBundleName, CommanderOptions.infoPlistFile, CommanderOptions.codeSignEntitlements, @@ -213,6 +214,7 @@ let generate = command( targetOption, bundleIdentifierOption, productModuleNameOption, + hostingBundleNameOption, infoPlistFileOption, codeSignEntitlementsOption, @@ -241,6 +243,7 @@ let generate = command( let targetName = try targetOption ?? processInfo.environmentVariable(name: EnvironmentKeys.target) let bundleIdentifier = try bundleIdentifierOption ?? processInfo.environmentVariable(name: EnvironmentKeys.bundleIdentifier) let productModuleName = try productModuleNameOption ?? processInfo.environmentVariable(name: EnvironmentKeys.productModuleName) + let hostingBundleName = try hostingBundleNameOption ?? processInfo.environmentVariable(name: EnvironmentKeys.hostingBundleName) let infoPlistFile = infoPlistFileOption ?? processInfo.environment[EnvironmentKeys.infoPlistFile] let codeSignEntitlements = codeSignEntitlementsOption ?? processInfo.environment[EnvironmentKeys.codeSignEntitlements] From 78db7455da3b00466b66a7e1e4ea0b199772e9ed Mon Sep 17 00:00:00 2001 From: Maciej Piotrowski Date: Thu, 2 Dec 2021 10:27:01 +0100 Subject: [PATCH 5/7] Makes `HOSTING_BUNDLE_NAME` an optional env variable --- Examples/Podfile | 6 +++--- Examples/Podfile.lock | 2 +- Examples/ResourceApp/ResourceApp.xcodeproj/project.pbxproj | 4 ++-- .../RswiftAppWithStaticFrameworks.xcodeproj/project.pbxproj | 4 ++-- Examples/RwatchApp/RwatchApp.xcodeproj/project.pbxproj | 2 +- Sources/rswift/main.swift | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Examples/Podfile b/Examples/Podfile index 700c58a6..77c965e1 100644 --- a/Examples/Podfile +++ b/Examples/Podfile @@ -32,19 +32,19 @@ target 'ResourceApp-watchOS-Extension' do end target 'App' do - platform :ios, '14.0' + platform :ios, '9.0' project 'RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks' rswiftlib end target 'Foo' do - platform :ios, '14.0' + platform :ios, '9.0' project 'RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks' rswiftlib end target 'Bar' do - platform :ios, '14.0' + platform :ios, '9.0' project 'RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks' rswiftlib end diff --git a/Examples/Podfile.lock b/Examples/Podfile.lock index 6f26a680..8551664d 100644 --- a/Examples/Podfile.lock +++ b/Examples/Podfile.lock @@ -23,6 +23,6 @@ SPEC CHECKSUMS: R.swift.Library: 5ba4f1631300caf9a4d890186930da85d540769d SWRevealViewController: 6d3fd97f70112fd7cef9de14df4260eacce4c63a -PODFILE CHECKSUM: 9ec20617b14d9852e3692e3fc8e47cdda4abbb32 +PODFILE CHECKSUM: d9a891a898cc2f561fdd4b8424cb30a1e14741d9 COCOAPODS: 1.11.2 diff --git a/Examples/ResourceApp/ResourceApp.xcodeproj/project.pbxproj b/Examples/ResourceApp/ResourceApp.xcodeproj/project.pbxproj index 8dcfa83c..f1b4202f 100644 --- a/Examples/ResourceApp/ResourceApp.xcodeproj/project.pbxproj +++ b/Examples/ResourceApp/ResourceApp.xcodeproj/project.pbxproj @@ -662,7 +662,7 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-ResourceAppTests/Pods-ResourceAppTests-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/R.swift.Library-iOS9.0/Rswift.framework", + "${BUILT_PRODUCTS_DIR}/R.swift.Library-iOS/Rswift.framework", "${BUILT_PRODUCTS_DIR}/SWRevealViewController/SWRevealViewController.framework", ); name = "[CP] Embed Pods Frameworks"; @@ -682,7 +682,7 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-ResourceApp/Pods-ResourceApp-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/R.swift.Library-iOS9.0/Rswift.framework", + "${BUILT_PRODUCTS_DIR}/R.swift.Library-iOS/Rswift.framework", "${BUILT_PRODUCTS_DIR}/SWRevealViewController/SWRevealViewController.framework", ); name = "[CP] Embed Pods Frameworks"; diff --git a/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.pbxproj b/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.pbxproj index f6d989f8..f66ee232 100644 --- a/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.pbxproj +++ b/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.pbxproj @@ -454,7 +454,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export HOSTING_BUNDLE_NAME=${PRODUCT_NAME}\nexport TARGET_NAME=${PRODUCT_NAME}Bundle\n\"$SRCROOT/../../.build/debug/rswift\" generate \"$SRCROOT/Bar/Sources/R.generated.swift\" > \"$SRCROOT/rswift.log\""; + shellScript = "export HOSTING_BUNDLE_NAME=${PRODUCT_NAME}\nexport TARGET_NAME=${PRODUCT_NAME}Bundle\n\"$SRCROOT/../../.build/debug/rswift\" generate \"$SRCROOT/Bar/Sources/R.generated.swift\" > \"$SRCROOT/rswift.log\"\n"; }; 4213D882A02A85E88A6D8CA9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; @@ -575,7 +575,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = ./copy_bundles.sh; + shellScript = "./copy_bundles.sh\n"; }; /* End PBXShellScriptBuildPhase section */ diff --git a/Examples/RwatchApp/RwatchApp.xcodeproj/project.pbxproj b/Examples/RwatchApp/RwatchApp.xcodeproj/project.pbxproj index bae9b41d..3604869d 100644 --- a/Examples/RwatchApp/RwatchApp.xcodeproj/project.pbxproj +++ b/Examples/RwatchApp/RwatchApp.xcodeproj/project.pbxproj @@ -315,7 +315,7 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-ResourceApp-watchOS-Extension/Pods-ResourceApp-watchOS-Extension-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/R.swift.Library-watchOS2.2/Rswift.framework", + "${BUILT_PRODUCTS_DIR}/R.swift.Library-watchOS/Rswift.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( diff --git a/Sources/rswift/main.swift b/Sources/rswift/main.swift index 2cd7ba5b..583925d5 100644 --- a/Sources/rswift/main.swift +++ b/Sources/rswift/main.swift @@ -243,7 +243,7 @@ let generate = command( let targetName = try targetOption ?? processInfo.environmentVariable(name: EnvironmentKeys.target) let bundleIdentifier = try bundleIdentifierOption ?? processInfo.environmentVariable(name: EnvironmentKeys.bundleIdentifier) let productModuleName = try productModuleNameOption ?? processInfo.environmentVariable(name: EnvironmentKeys.productModuleName) - let hostingBundleName = try hostingBundleNameOption ?? processInfo.environmentVariable(name: EnvironmentKeys.hostingBundleName) + let hostingBundleName = hostingBundleNameOption ?? processInfo.environment[EnvironmentKeys.hostingBundleName] let infoPlistFile = infoPlistFileOption ?? processInfo.environment[EnvironmentKeys.infoPlistFile] let codeSignEntitlements = codeSignEntitlementsOption ?? processInfo.environment[EnvironmentKeys.codeSignEntitlements] From 19afe0fd444263d73dac1efd3e4def75dc252223 Mon Sep 17 00:00:00 2001 From: Tom Lokhorst Date: Sat, 4 Dec 2021 16:32:01 +0100 Subject: [PATCH 6/7] Move hostingBundle option out of Xcode environment variables --- Sources/RswiftCore/CallInformation.swift | 6 +++--- Sources/RswiftCore/RswiftCore.swift | 4 ++-- .../Util/Struct+InternalProperties.swift | 9 ++++++--- Sources/rswift/main.swift | 17 +++++++++-------- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/Sources/RswiftCore/CallInformation.swift b/Sources/RswiftCore/CallInformation.swift index 1e30c8a6..8687fd7c 100644 --- a/Sources/RswiftCore/CallInformation.swift +++ b/Sources/RswiftCore/CallInformation.swift @@ -14,6 +14,7 @@ public struct CallInformation { let outputURL: URL let uiTestOutputURL: URL? let rswiftIgnoreURL: URL + let hostingBundle: String? let generators: [Generator] let accessLevel: AccessLevel @@ -23,7 +24,6 @@ public struct CallInformation { let targetName: String let bundleIdentifier: String let productModuleName: String - let hostingBundleName: String? let infoPlistFile: URL? let codeSignEntitlements: URL? @@ -37,6 +37,7 @@ public struct CallInformation { outputURL: URL, uiTestOutputURL: URL?, rswiftIgnoreURL: URL, + hostingBundle: String?, generators: [Generator], accessLevel: AccessLevel, @@ -46,7 +47,6 @@ public struct CallInformation { targetName: String, bundleIdentifier: String, productModuleName: String, - hostingBundleName: String?, infoPlistFile: URL?, codeSignEntitlements: URL?, @@ -59,6 +59,7 @@ public struct CallInformation { self.outputURL = outputURL self.uiTestOutputURL = uiTestOutputURL self.rswiftIgnoreURL = rswiftIgnoreURL + self.hostingBundle = hostingBundle self.accessLevel = accessLevel self.imports = imports @@ -68,7 +69,6 @@ public struct CallInformation { self.targetName = targetName self.bundleIdentifier = bundleIdentifier self.productModuleName = productModuleName - self.hostingBundleName = hostingBundleName self.infoPlistFile = infoPlistFile self.codeSignEntitlements = codeSignEntitlements diff --git a/Sources/RswiftCore/RswiftCore.swift b/Sources/RswiftCore/RswiftCore.swift index 8920664e..6e209853 100644 --- a/Sources/RswiftCore/RswiftCore.swift +++ b/Sources/RswiftCore/RswiftCore.swift @@ -156,8 +156,8 @@ public struct RswiftCore { let (externalStructWithoutProperties, internalStruct) = ValidatedStructGenerator(validationSubject: aggregatedResult) .generatedStructs(at: callInformation.accessLevel, prefix: "") - let externalStruct = externalStructWithoutProperties.addingInternalProperties(forBundleIdentifier: callInformation.bundleIdentifier, - hostingBundleName: callInformation.hostingBundleName) + let externalStruct = externalStructWithoutProperties + .addingInternalProperties(forBundleIdentifier: callInformation.bundleIdentifier, hostingBundle: callInformation.hostingBundle) let codeConvertibles: [SwiftCodeConverible?] = [ HeaderPrinter(), diff --git a/Sources/RswiftCore/Util/Struct+InternalProperties.swift b/Sources/RswiftCore/Util/Struct+InternalProperties.swift index b9b73e61..7cc9eaae 100644 --- a/Sources/RswiftCore/Util/Struct+InternalProperties.swift +++ b/Sources/RswiftCore/Util/Struct+InternalProperties.swift @@ -9,11 +9,14 @@ import Foundation extension Struct { - func addingInternalProperties(forBundleIdentifier bundleIdentifier: String, hostingBundleName: String? = nil) -> Struct { - var hostingBundleValue = "Bundle(for: R.Class.self)" - if let bundleName = hostingBundleName, !bundleName.isEmpty { + func addingInternalProperties(forBundleIdentifier bundleIdentifier: String, hostingBundle: String? = nil) -> Struct { + let hostingBundleValue: String + if let bundleName = hostingBundle, !bundleName.isEmpty { hostingBundleValue = "Bundle(for: R.Class.self).path(forResource: \"\(bundleName)\", ofType: \"bundle\").flatMap(Bundle.init(path:)) ?? Bundle(for: R.Class.self)" + } else { + hostingBundleValue = "Bundle(for: R.Class.self)" } + let internalProperties = [ Let( comments: [], diff --git a/Sources/rswift/main.swift b/Sources/rswift/main.swift index 583925d5..38f2077c 100644 --- a/Sources/rswift/main.swift +++ b/Sources/rswift/main.swift @@ -82,7 +82,6 @@ struct EnvironmentKeys { static let bundleIdentifier = "PRODUCT_BUNDLE_IDENTIFIER" static let productModuleName = "PRODUCT_MODULE_NAME" - static let hostingBundleName = "HOSTING_BUNDLE_NAME" static let scriptInputFileCount = "SCRIPT_INPUT_FILE_COUNT" static let scriptOutputFileCount = "SCRIPT_OUTPUT_FILE_COUNT" static let target = "TARGET_NAME" @@ -112,13 +111,13 @@ struct CommanderOptions { static let importModules = Option("import", default: "", description: "Add extra modules as import in the generated file, comma seperated") static let accessLevel = Option("accessLevel", default: AccessLevel.internalLevel, description: "The access level [public|internal] to use for the generated R-file") static let rswiftIgnore = Option("rswiftignore", default: ".rswiftignore", description: "Path to pattern file that describes files that should be ignored") + static let hostingBundle: Option = Option("hostingBundle", default: nil, description: "Override bundle from which resources are loaded") // Project specific - Environment variable overrides static let xcodeproj: Option = Option("xcodeproj", default: nil, description: "Defaults to environment variable \(EnvironmentKeys.xcodeproj)") static let target: Option = Option("target", default: nil, description: "Defaults to environment variable \(EnvironmentKeys.target)") static let bundleIdentifier: Option = Option("bundleIdentifier", default: nil, description: "Defaults to environment variable \(EnvironmentKeys.bundleIdentifier)") static let productModuleName: Option = Option("productModuleName", default: nil, description: "Defaults to environment variable \(EnvironmentKeys.productModuleName)") - static let hostingBundleName: Option = Option("hostingBundleName", default: nil, description: "Defaults to environment variable \(EnvironmentKeys.hostingBundleName)") static let infoPlistFile: Option = Option("infoPlistFile", default: nil, description: "Defaults to environment variable \(EnvironmentKeys.infoPlistFile)") static let codeSignEntitlements: Option = Option("codeSignEntitlements", default: nil, description: "Defaults to environment variable \(EnvironmentKeys.codeSignEntitlements)") @@ -187,12 +186,12 @@ let generate = command( CommanderOptions.importModules, CommanderOptions.accessLevel, CommanderOptions.rswiftIgnore, + CommanderOptions.hostingBundle, CommanderOptions.xcodeproj, CommanderOptions.target, CommanderOptions.bundleIdentifier, CommanderOptions.productModuleName, - CommanderOptions.hostingBundleName, CommanderOptions.infoPlistFile, CommanderOptions.codeSignEntitlements, @@ -209,12 +208,12 @@ let generate = command( importModules, accessLevel, rswiftIgnore, + hostingBundle, xcodeprojOption, targetOption, bundleIdentifierOption, productModuleNameOption, - hostingBundleNameOption, infoPlistFileOption, codeSignEntitlementsOption, @@ -243,7 +242,6 @@ let generate = command( let targetName = try targetOption ?? processInfo.environmentVariable(name: EnvironmentKeys.target) let bundleIdentifier = try bundleIdentifierOption ?? processInfo.environmentVariable(name: EnvironmentKeys.bundleIdentifier) let productModuleName = try productModuleNameOption ?? processInfo.environmentVariable(name: EnvironmentKeys.productModuleName) - let hostingBundleName = hostingBundleNameOption ?? processInfo.environment[EnvironmentKeys.hostingBundleName] let infoPlistFile = infoPlistFileOption ?? processInfo.environment[EnvironmentKeys.infoPlistFile] let codeSignEntitlements = codeSignEntitlementsOption ?? processInfo.environment[EnvironmentKeys.codeSignEntitlements] @@ -278,6 +276,7 @@ let generate = command( outputURL: outputURL, uiTestOutputURL: uiTestOutputURL, rswiftIgnoreURL: rswiftIgnoreURL, + hostingBundle: hostingBundle, generators: generators, accessLevel: accessLevel, @@ -287,7 +286,6 @@ let generate = command( targetName: targetName, bundleIdentifier: bundleIdentifier, productModuleName: productModuleName, - hostingBundleName: hostingBundleName, infoPlistFile: infoPlistFile.map { URL(fileURLWithPath: $0) }, codeSignEntitlements: codeSignEntitlements.map { URL(fileURLWithPath: $0) }, @@ -309,6 +307,7 @@ let printCommand = command( CommanderOptions.importModules, CommanderOptions.accessLevel, CommanderOptions.rswiftIgnore, + CommanderOptions.hostingBundle, CommanderArguments.outputPath ) { @@ -319,6 +318,7 @@ let printCommand = command( importModules, accessLevel, rswiftIgnore, + hostingBundle, outputPath in @@ -327,7 +327,6 @@ let printCommand = command( let targetName = try processInfo.environmentVariable(name: EnvironmentKeys.target) let bundleIdentifier = try processInfo.environmentVariable(name: EnvironmentKeys.bundleIdentifier) let productModuleName = try processInfo.environmentVariable(name: EnvironmentKeys.productModuleName) - let hostingBundleName = try processInfo.environmentVariable(name: EnvironmentKeys.hostingBundleName) let infoPlistFile = processInfo.environment[EnvironmentKeys.infoPlistFile] let codeSignEntitlements = processInfo.environment[EnvironmentKeys.codeSignEntitlements] @@ -356,12 +355,14 @@ let printCommand = command( if rswiftIgnore != CommanderOptions.rswiftIgnore.default { args.append("--\(CommanderOptions.rswiftIgnore.name) \(rswiftIgnore)") } + if let hostingBundle = hostingBundle { + args.append("--\(CommanderOptions.hostingBundle.name) \(hostingBundle)") + } // Add args for environment variables args.append("--\(CommanderOptions.target.name) \(escapePath(targetName))") args.append("--\(CommanderOptions.bundleIdentifier.name) \(escapePath(bundleIdentifier))") args.append("--\(CommanderOptions.productModuleName.name) \(escapePath(productModuleName))") - args.append("--\(CommanderOptions.hostingBundleName.name) \(escapePath(hostingBundleName))") if let infoPlistFile = infoPlistFile { args.append("--\(CommanderOptions.infoPlistFile.name) \(escapePath(infoPlistFile))") } From ba3839ddd4405f7f58b6168863aef8061c070bf5 Mon Sep 17 00:00:00 2001 From: Tom Lokhorst Date: Sat, 4 Dec 2021 16:32:25 +0100 Subject: [PATCH 7/7] Update examples for hostingBundle option --- .../project.pbxproj | 11 +-- .../RswiftAppWithStaticFrameworks/project.yml | 87 ------------------- ...esourceApp-watchOS (Notification).xcscheme | 25 ++---- .../xcschemes/ResourceApp-watchOS.xcscheme | 25 ++---- 4 files changed, 18 insertions(+), 130 deletions(-) delete mode 100644 Examples/RswiftAppWithStaticFrameworks/project.yml diff --git a/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.pbxproj b/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.pbxproj index f66ee232..949d1918 100644 --- a/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.pbxproj +++ b/Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -438,13 +438,13 @@ /* Begin PBXShellScriptBuildPhase section */ 0B3751134FEE9BB94D60B6B8 /* R.swift */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "$(TEMP_DIR)/rswift-lastrun", ); name = R.swift; outputFileListPaths = ( @@ -454,7 +454,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export HOSTING_BUNDLE_NAME=${PRODUCT_NAME}\nexport TARGET_NAME=${PRODUCT_NAME}Bundle\n\"$SRCROOT/../../.build/debug/rswift\" generate \"$SRCROOT/Bar/Sources/R.generated.swift\" > \"$SRCROOT/rswift.log\"\n"; + shellScript = "\"$SRCROOT/../../build/Debug/rswift\" generate \"$SRCROOT/Bar/Sources/R.generated.swift\" --hostingBundle ${PRODUCT_NAME} --target ${PRODUCT_NAME}Bundle\n"; }; 4213D882A02A85E88A6D8CA9 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; @@ -519,13 +519,13 @@ }; 77448D795985C19AF55A5F1F /* R.swift */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "$(TEMP_DIR)/rswift-lastrun", ); name = R.swift; outputFileListPaths = ( @@ -535,7 +535,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export HOSTING_BUNDLE_NAME=${PRODUCT_NAME}\nexport TARGET_NAME=${PRODUCT_NAME}Bundle\n\"$SRCROOT/../../.build/debug/rswift\" generate \"$SRCROOT/Foo/Sources/R.generated.swift\" > \"$SRCROOT/rswift.log\"\n"; + shellScript = "\"$SRCROOT/../../build/Debug/rswift\" generate \"$SRCROOT/Foo/Sources/R.generated.swift\" --hostingBundle ${PRODUCT_NAME} --target ${PRODUCT_NAME}Bundle\n"; }; 795DD9FA56EF642DB2307F41 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; @@ -561,6 +561,7 @@ }; 7F553EDAB894541615C8EB2C /* Copy Bundles */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); diff --git a/Examples/RswiftAppWithStaticFrameworks/project.yml b/Examples/RswiftAppWithStaticFrameworks/project.yml deleted file mode 100644 index 71643d5c..00000000 --- a/Examples/RswiftAppWithStaticFrameworks/project.yml +++ /dev/null @@ -1,87 +0,0 @@ -#This is a manifest for .xcodeproj generation with https://github.com/yonaskolb/XcodeGen -name: RswiftAppWithStaticFrameworks -configs: - Debug: debug - Release: release -options: - postGenCommand: pod install -targets: - App: - type: application - platform: iOS - settings: - PRODUCT_BUNDLE_IDENTIFIER: com.rswift.$(PRODUCT_NAME:c99extidentifier) - sources: - - path: App - dependencies: - - target: Foo - - target: Bar - postbuildScripts: - - name: Copy Bundles - script: ./copy_bundles.sh - - Foo: - type: framework.static - platform: iOS - settings: - INFOPLIST_FILE: Foo/Info.plist - INSTALL_PATH: $(LOCAL_LIBRARY_DIR)/Frameworks - PRODUCT_BUNDLE_IDENTIFIER: com.rswift.$(PRODUCT_NAME:c99extidentifier) - sources: - - path: Foo/Sources - createIntermediateGroups: true - dependencies: - - target: FooBundle - embed: true - prebuildScripts: - - name: R.swift - script: "export HOSTING_BUNDLE_NAME=${PRODUCT_NAME}\nexport TARGET_NAME=${PRODUCT_NAME}Bundle\n\"$SRCROOT/../../.build/debug/rswift\" generate \"$SRCROOT/Foo/Sources/R.generated.swift\" > \"$SRCROOT/rswift.log\"" - inputFiles: - - $(TEMP_DIR)/rswift-lastrun - outputFiles: - - $(SRCROOT)/Foo/Sources/R.generated.swift - - FooBundle: - type: bundle - platform: iOS - settings: - MACH_O_TYPE: mh_bundle - INFOPLIST_FILE: Foo/Info.plist - PRODUCT_BUNDLE_IDENTIFIER: com.rswift.$(PRODUCT_NAME:c99extidentifier) - PRODUCT_NAME: Foo - sources: - - path: Foo/Resources - createIntermediateGroups: true - - Bar: - type: framework.static - platform: iOS - settings: - INFOPLIST_FILE: Bar/Info.plist - PRODUCT_BUNDLE_IDENTIFIER: com.rswift.$(PRODUCT_NAME:c99extidentifier) - PRODUCT_NAME: Bar - sources: - - path: Bar/Sources - createIntermediateGroups: true - dependencies: - - target: BarBundle - embed: true - prebuildScripts: - - name: R.swift - script: "export HOSTING_BUNDLE_NAME=${PRODUCT_NAME}\nexport TARGET_NAME=${PRODUCT_NAME}Bundle\n\"$SRCROOT/../../.build/debug/rswift\" generate \"$SRCROOT/Bar/Sources/R.generated.swift\" > \"$SRCROOT/rswift.log\"" - inputFiles: - - $(TEMP_DIR)/rswift-lastrun - outputFiles: - - $(SRCROOT)/Bar/Sources/R.generated.swift - - BarBundle: - type: bundle - platform: iOS - settings: - PRODUCT_BUNDLE_IDENTIFIER: com.rswift.$(PRODUCT_NAME:c99extidentifier) - MACH_O_TYPE: mh_bundle - INFOPLIST_FILE: Bar/Info.plist - PRODUCT_NAME: Bar - sources: - - path: Bar/Resources - createIntermediateGroups: true \ No newline at end of file diff --git a/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS (Notification).xcscheme b/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS (Notification).xcscheme index b1e372c2..7188537e 100644 --- a/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS (Notification).xcscheme +++ b/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS (Notification).xcscheme @@ -41,10 +41,8 @@ debugServiceExtension = "internal" allowLocationSimulation = "YES" launchAutomaticallySubstyle = "8"> - + - + - + - - - - - + diff --git a/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS.xcscheme b/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS.xcscheme index 4223881f..2075d6fb 100644 --- a/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS.xcscheme +++ b/Examples/RwatchApp/RwatchApp.xcodeproj/xcshareddata/xcschemes/ResourceApp-watchOS.xcscheme @@ -41,10 +41,8 @@ debugServiceExtension = "internal" allowLocationSimulation = "YES" notificationPayloadFile = "ResourceApp-watchOS-Extension/PushNotificationPayload.apns"> - + - + - + - - - - - +