diff --git a/CHANGELOG.md b/CHANGELOG.md index af809dba..fe456e64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ - Add `Scheme.Test.TestTarget.skipped` to allow skipping of an entire test target. [#916](https://github.com/yonaskolb/XcodeGen/pull/916) @codeman9 +#### Fixed +- Allow SDK dependencies to be embedded. [#922](https://github.com/yonaskolb/XcodeGen/pull/922) @k-thorat + ## 2.17.0 #### Added diff --git a/Sources/XcodeGenKit/PBXProjGenerator.swift b/Sources/XcodeGenKit/PBXProjGenerator.swift index aace13b2..0ac2909e 100644 --- a/Sources/XcodeGenKit/PBXProjGenerator.swift +++ b/Sources/XcodeGenKit/PBXProjGenerator.swift @@ -827,6 +827,13 @@ public class PBXProjGenerator { ) targetFrameworkBuildFiles.append(buildFile) + if dependency.embed == true { + let embedFile = addObject( + PBXBuildFile(file: fileReference, settings: getEmbedSettings(dependency: dependency, codeSign: dependency.codeSign ?? true)) + ) + copyFrameworksReferences.append(embedFile) + } + case .carthage(let findFrameworks, let linkType): let findFrameworks = findFrameworks ?? project.options.findCarthageFrameworks let allDependencies = findFrameworks diff --git a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift index b48e2b96..1f2e329e 100644 --- a/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/ProjectGeneratorTests.swift @@ -559,6 +559,9 @@ class ProjectGeneratorTests: XCTestCase { Dependency(type: .package(product: "RxCocoa"), reference: "RxSwift"), Dependency(type: .package(product: "RxRelay"), reference: "RxSwift"), + // Validate - Do not link package + Dependency(type: .package(product: "KeychainAccess"), reference: "KeychainAccess", link: false), + // Statically linked, so don't embed into test Dependency(type: .target, reference: staticLibrary.name), @@ -679,25 +682,37 @@ class ProjectGeneratorTests: XCTestCase { iosFrameworkB.filename, ]) + let XCTestPath = "Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework" + let GXToolsPath = "Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/GXTools.framework" + let XCTAutomationPath = "Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/XCTAutomationSupport.framework" let stickerPack = Target( name: "MyStickerApp", type: .stickerPack, platform: .iOS, dependencies: [ Dependency(type: .sdk(root: nil), reference: "NotificationCenter.framework"), - Dependency(type: .sdk(root: "DEVELOPER_DIR"), reference: "Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework"), + Dependency(type: .sdk(root: "DEVELOPER_DIR"), reference: XCTestPath), + Dependency(type: .sdk(root: "DEVELOPER_DIR"), reference: GXToolsPath, embed: true), + Dependency(type: .sdk(root: "DEVELOPER_DIR"), reference: XCTAutomationPath, embed: true, codeSign: true), ] ) expectedResourceFiles[stickerPack.name] = nil expectedLinkedFiles[stickerPack.name] = Set([ "XCTest.framework", "NotificationCenter.framework", + "GXTools.framework", + "XCTAutomationSupport.framework" + ]) + expectedEmbeddedFrameworks[stickerPack.name] = Set([ + "GXTools.framework", + "XCTAutomationSupport.framework" ]) let targets = [app, iosFrameworkZ, iosFrameworkX, staticLibrary, resourceBundle, iosFrameworkA, iosFrameworkB, appTest, appTestWithoutTransitive, stickerPack] let packages: [String: SwiftPackage] = [ "RxSwift": .remote(url: "https://github.com/ReactiveX/RxSwift", versionRequirement: .upToNextMajorVersion("5.1.1")), + "KeychainAccess": .remote(url: "https://github.com/kishikawakatsumi/KeychainAccess", versionRequirement: .upToNextMajorVersion("4.2.0")) ] let project = Project(