From c778fedc52343e603ce6cc5ab40dd31e7f8ad80b Mon Sep 17 00:00:00 2001 From: Kas Date: Fri, 30 Aug 2019 11:11:19 +0100 Subject: [PATCH] Prevent embedding static frameworks (#490) Resolves https://github.com/tuist/tuist/issues/454 - All `FrameworkNodes` (i.e. prebuilt frameworks) were being embedded regardless of their linkage - This check was redundant as there was a more general check for `PrecompiledNode` which happens to be the super class of `FrameworkNode` which took into account the framework linkage - To resolve this issue it was suffice to remove the redundant check Test Plan: - Generate `fixtures/ios_app_with_static_frameworks` via running `tuist generate` - Verify the generated project doesn't embed `PrebuiltStaticFramework` - Verify the generated project builds successfully --- CHANGELOG.md | 1 + Sources/TuistGenerator/Graph/Graph.swift | 15 +- .../Graph/GraphTests.swift | 29 +++ fixtures/README.md | 33 ++- .../Prebuilt/Config/Info.plist | 24 +++ .../Prebuilt/Project.swift | 14 ++ .../Sources/StaticFrameworkClass.swift | 9 + .../Prebuilt/build.sh | 41 ++++ .../Headers/PrebuiltStaticFramework-Swift.h | 189 ++++++++++++++++++ .../Info.plist | Bin 0 -> 867 bytes .../arm64.swiftdoc | Bin 0 -> 388 bytes .../arm64.swiftmodule | Bin 0 -> 13944 bytes .../x86_64.swiftdoc | Bin 0 -> 400 bytes .../x86_64.swiftmodule | Bin 0 -> 14064 bytes .../Modules/module.modulemap | 4 + .../PrebuiltStaticFramework | Bin 0 -> 28496 bytes .../Project.swift | 3 +- .../Sources/AppDelegate.swift | 4 + 18 files changed, 341 insertions(+), 25 deletions(-) create mode 100644 fixtures/ios_app_with_static_frameworks/Prebuilt/Config/Info.plist create mode 100644 fixtures/ios_app_with_static_frameworks/Prebuilt/Project.swift create mode 100644 fixtures/ios_app_with_static_frameworks/Prebuilt/Sources/StaticFrameworkClass.swift create mode 100755 fixtures/ios_app_with_static_frameworks/Prebuilt/build.sh create mode 100644 fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Headers/PrebuiltStaticFramework-Swift.h create mode 100644 fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Info.plist create mode 100644 fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/arm64.swiftdoc create mode 100644 fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/arm64.swiftmodule create mode 100644 fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/x86_64.swiftdoc create mode 100644 fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/x86_64.swiftmodule create mode 100644 fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/module.modulemap create mode 100644 fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/PrebuiltStaticFramework diff --git a/CHANGELOG.md b/CHANGELOG.md index 48018a8eb..b3afdaef3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Please, check out guidelines: https://keepachangelog.com/en/1.0.0/ ### Fixed - Transitively link static dependency's dynamic dependencies correctly https://github.com/tuist/tuist/pull/484 by @adamkhazi +- Prevent embedding static frameworks https://github.com/tuist/tuist/pull/490 by @kwridan ## 0.17.0 diff --git a/Sources/TuistGenerator/Graph/Graph.swift b/Sources/TuistGenerator/Graph/Graph.swift index 99888b58b..a56b40d00 100644 --- a/Sources/TuistGenerator/Graph/Graph.swift +++ b/Sources/TuistGenerator/Graph/Graph.swift @@ -309,15 +309,6 @@ class Graph: Graphing { references.append(contentsOf: otherTargetFrameworks) - /// Pre-built frameworks - let transitiveFrameworks = findAll(targetNode: targetNode) - .lazy - .filter(FrameworkNode.self) - .map(\.path) - .map(DependencyReference.absolute) - - references.append(contentsOf: transitiveFrameworks) - return Set(references).sorted() } @@ -424,10 +415,8 @@ extension Graph { visited.insert(node) - // swiftlint:disable:next force_cast - if node != targetNode, node is T, test(node as! T) { - // swiftlint:disable:next force_cast - references.insert(node as! T) + if node != targetNode, let matchingNode = node as? T, test(matchingNode) { + references.insert(matchingNode) } if node != targetNode, let node = node as? T, skip(node) { diff --git a/Tests/TuistGeneratorTests/Graph/GraphTests.swift b/Tests/TuistGeneratorTests/Graph/GraphTests.swift index efbc94f62..30158790b 100644 --- a/Tests/TuistGeneratorTests/Graph/GraphTests.swift +++ b/Tests/TuistGeneratorTests/Graph/GraphTests.swift @@ -483,6 +483,35 @@ final class GraphTests: XCTestCase { ]) } + func test_embeddableFrameworks_when_precompiledStaticFramework() throws { + // Given + let target = Target.test(name: "Main") + let project = Project.test(targets: [target]) + + let frameworkNode = FrameworkNode(path: "/test/StaticFramework.framework") + let targetNode = TargetNode( + project: project, + target: target, + dependencies: [frameworkNode] + ) + let cache = GraphLoaderCache() + cache.add(targetNode: targetNode) + let graph = Graph.test(cache: cache) + + system.succeedCommand("/usr/bin/file", "/test/StaticFramework.framework/StaticFramework", + output: "current ar archive random library") + + // When + let result = try graph.embeddableFrameworks( + path: project.path, + name: target.name, + system: system + ) + + // Then + XCTAssertTrue(result.isEmpty) + } + func test_embeddableFrameworks_ordered() throws { // Given let dependencyNames = (0 ..< 10).shuffled().map { "Dependency\($0)" } diff --git a/fixtures/README.md b/fixtures/README.md index 4c4766ede..89f04d5d8 100644 --- a/fixtures/README.md +++ b/fixtures/README.md @@ -160,27 +160,38 @@ Workspace: - App: - MainApp (iOS app) - MainAppTests (iOS unit tests) - - A: - - A (static framework iOS) - - ATests (iOS unit tests) - - B: - - B (static framework iOS) - - BTests (iOS unit tests) - - C: - - C (static framework iOS) - - CTests (iOS unit tests) - - D: - - D (dynamic framework iOS) + - Modules + - A: + - A (static framework iOS) + - ATests (iOS unit tests) + - B: + - B (static framework iOS) + - BTests (iOS unit tests) + - C: + - C (static framework iOS) + - CTests (iOS unit tests) + - D: + - D (dynamic framework iOS) +``` + +A standalone `Prebuilt` project is used to generate a prebuilt static framework: + +``` +- Prebuilt + - PrebuiltStaticFramework (static framework iOS) ``` Dependencies: - App -> A - App -> C +- App -> PrebuiltStaticFramework - A -> B - A -> C - C -> D +Note: to re-create `PrebuiltStaticFramework.framework` run `fixtures/ios_app_with_static_frameworks/Prebuilt//build.sh` + ## ios_app_with_tests Simple app with tests. diff --git a/fixtures/ios_app_with_static_frameworks/Prebuilt/Config/Info.plist b/fixtures/ios_app_with_static_frameworks/Prebuilt/Config/Info.plist new file mode 100644 index 000000000..3c29058d4 --- /dev/null +++ b/fixtures/ios_app_with_static_frameworks/Prebuilt/Config/Info.plist @@ -0,0 +1,24 @@ + + + + + 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) + NSHumanReadableCopyright + Copyright Tuist©. All rights reserved. + + diff --git a/fixtures/ios_app_with_static_frameworks/Prebuilt/Project.swift b/fixtures/ios_app_with_static_frameworks/Prebuilt/Project.swift new file mode 100644 index 000000000..4c5a5dc7d --- /dev/null +++ b/fixtures/ios_app_with_static_frameworks/Prebuilt/Project.swift @@ -0,0 +1,14 @@ +import ProjectDescription + +let project = Project( + name: "Prebuilt", + targets: [ + Target(name: "PrebuiltStaticFramework", + platform: .iOS, + product: .staticFramework, + bundleId: "io.tuist.PrebuiltStaticFramework", + infoPlist: "Config/Info.plist", + sources: "Sources/**", + dependencies: []) + ] +) diff --git a/fixtures/ios_app_with_static_frameworks/Prebuilt/Sources/StaticFrameworkClass.swift b/fixtures/ios_app_with_static_frameworks/Prebuilt/Sources/StaticFrameworkClass.swift new file mode 100644 index 000000000..1f40fad64 --- /dev/null +++ b/fixtures/ios_app_with_static_frameworks/Prebuilt/Sources/StaticFrameworkClass.swift @@ -0,0 +1,9 @@ +import Foundation + +public class StaticFrameworkClass { + public init() {} + + public func hello() -> String { + return "StaticFrameworkClass.hello()" + } +} diff --git a/fixtures/ios_app_with_static_frameworks/Prebuilt/build.sh b/fixtures/ios_app_with_static_frameworks/Prebuilt/build.sh new file mode 100755 index 000000000..b79f65a7f --- /dev/null +++ b/fixtures/ios_app_with_static_frameworks/Prebuilt/build.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +tuist generate + +WORKSPACE_NAME="Prebuilt" +FRAMEWORK_NAME="PrebuiltStaticFramework" +TEMP_DIR="/tmp/tuist-$FRAMEWORK_NAME-fixture" +IPHONE_SIM_DIR="$TEMP_DIR/Build/Products/Debug-iphoneos" +IPHONE_OS_DIR="$TEMP_DIR/Build/Products/Debug-iphonesimulator" + +mkdir -p $TEMP_DIR + +xcrun xcodebuild build -scheme "$FRAMEWORK_NAME" -workspace "$WORKSPACE_NAME.xcworkspace" -sdk iphoneos -destination "generic/platform=iOS" -derivedDataPath $TEMP_DIR +xcrun xcodebuild build -scheme "$FRAMEWORK_NAME" -workspace "$WORKSPACE_NAME.xcworkspace" -sdk iphonesimulator -derivedDataPath $TEMP_DIR + +mkdir -p "prebuilt/$FRAMEWORK_NAME.framework" + +lipo -create \ + "$IPHONE_OS_DIR/$FRAMEWORK_NAME.framework/$FRAMEWORK_NAME" \ + "$IPHONE_SIM_DIR/$FRAMEWORK_NAME.framework/$FRAMEWORK_NAME" \ + -output "$(pwd)/prebuilt/$FRAMEWORK_NAME.framework/$FRAMEWORK_NAME" + +cp \ + "$IPHONE_OS_DIR/$FRAMEWORK_NAME.framework/Info.plist" \ + "$(pwd)/prebuilt/$FRAMEWORK_NAME.framework/Info.plist" + +mkdir -p "prebuilt/$FRAMEWORK_NAME.framework/Headers" +cp -r \ + "$IPHONE_OS_DIR/$FRAMEWORK_NAME.framework/Headers/"* \ + "$(pwd)/prebuilt/$FRAMEWORK_NAME.framework/Headers/" + +mkdir -p "prebuilt/$FRAMEWORK_NAME.framework/Modules" +cp \ + "$IPHONE_OS_DIR/$FRAMEWORK_NAME.framework/Modules/module.modulemap" \ + "$(pwd)/prebuilt/$FRAMEWORK_NAME.framework/Modules/module.modulemap" + +mkdir -p "prebuilt/$FRAMEWORK_NAME.framework/Modules/$FRAMEWORK_NAME.swiftmodule" +cp -r \ + "$IPHONE_OS_DIR/$FRAMEWORK_NAME.framework/Modules/$FRAMEWORK_NAME.swiftmodule/"* \ + "$IPHONE_SIM_DIR/$FRAMEWORK_NAME.framework/Modules/$FRAMEWORK_NAME.swiftmodule/"* \ + "$(pwd)/prebuilt/$FRAMEWORK_NAME.framework/Modules/$FRAMEWORK_NAME.swiftmodule/" \ No newline at end of file diff --git a/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Headers/PrebuiltStaticFramework-Swift.h b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Headers/PrebuiltStaticFramework-Swift.h new file mode 100644 index 000000000..4b1fd03c4 --- /dev/null +++ b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Headers/PrebuiltStaticFramework-Swift.h @@ -0,0 +1,189 @@ +// Generated by Apple Swift version 5.0.1 (swiftlang-1001.0.82.4 clang-1001.0.46.5) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wgcc-compat" + +#if !defined(__has_include) +# define __has_include(x) 0 +#endif +#if !defined(__has_attribute) +# define __has_attribute(x) 0 +#endif +#if !defined(__has_feature) +# define __has_feature(x) 0 +#endif +#if !defined(__has_warning) +# define __has_warning(x) 0 +#endif + +#if __has_include() +# include +#endif + +#pragma clang diagnostic ignored "-Wauto-import" +#include +#include +#include +#include + +#if !defined(SWIFT_TYPEDEFS) +# define SWIFT_TYPEDEFS 1 +# if __has_include() +# include +# elif !defined(__cplusplus) +typedef uint_least16_t char16_t; +typedef uint_least32_t char32_t; +# endif +typedef float swift_float2 __attribute__((__ext_vector_type__(2))); +typedef float swift_float3 __attribute__((__ext_vector_type__(3))); +typedef float swift_float4 __attribute__((__ext_vector_type__(4))); +typedef double swift_double2 __attribute__((__ext_vector_type__(2))); +typedef double swift_double3 __attribute__((__ext_vector_type__(3))); +typedef double swift_double4 __attribute__((__ext_vector_type__(4))); +typedef int swift_int2 __attribute__((__ext_vector_type__(2))); +typedef int swift_int3 __attribute__((__ext_vector_type__(3))); +typedef int swift_int4 __attribute__((__ext_vector_type__(4))); +typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); +typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); +typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); +#endif + +#if !defined(SWIFT_PASTE) +# define SWIFT_PASTE_HELPER(x, y) x##y +# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) +#endif +#if !defined(SWIFT_METATYPE) +# define SWIFT_METATYPE(X) Class +#endif +#if !defined(SWIFT_CLASS_PROPERTY) +# if __has_feature(objc_class_property) +# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ +# else +# define SWIFT_CLASS_PROPERTY(...) +# endif +#endif + +#if __has_attribute(objc_runtime_name) +# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) +#else +# define SWIFT_RUNTIME_NAME(X) +#endif +#if __has_attribute(swift_name) +# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) +#else +# define SWIFT_COMPILE_NAME(X) +#endif +#if __has_attribute(objc_method_family) +# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) +#else +# define SWIFT_METHOD_FAMILY(X) +#endif +#if __has_attribute(noescape) +# define SWIFT_NOESCAPE __attribute__((noescape)) +#else +# define SWIFT_NOESCAPE +#endif +#if __has_attribute(warn_unused_result) +# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +#else +# define SWIFT_WARN_UNUSED_RESULT +#endif +#if __has_attribute(noreturn) +# define SWIFT_NORETURN __attribute__((noreturn)) +#else +# define SWIFT_NORETURN +#endif +#if !defined(SWIFT_CLASS_EXTRA) +# define SWIFT_CLASS_EXTRA +#endif +#if !defined(SWIFT_PROTOCOL_EXTRA) +# define SWIFT_PROTOCOL_EXTRA +#endif +#if !defined(SWIFT_ENUM_EXTRA) +# define SWIFT_ENUM_EXTRA +#endif +#if !defined(SWIFT_CLASS) +# if __has_attribute(objc_subclassing_restricted) +# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA +# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA +# else +# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA +# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA +# endif +#endif + +#if !defined(SWIFT_PROTOCOL) +# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA +# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA +#endif + +#if !defined(SWIFT_EXTENSION) +# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) +#endif + +#if !defined(OBJC_DESIGNATED_INITIALIZER) +# if __has_attribute(objc_designated_initializer) +# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +# else +# define OBJC_DESIGNATED_INITIALIZER +# endif +#endif +#if !defined(SWIFT_ENUM_ATTR) +# if defined(__has_attribute) && __has_attribute(enum_extensibility) +# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) +# else +# define SWIFT_ENUM_ATTR(_extensibility) +# endif +#endif +#if !defined(SWIFT_ENUM) +# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type +# if __has_feature(generalized_swift_name) +# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type +# else +# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) +# endif +#endif +#if !defined(SWIFT_UNAVAILABLE) +# define SWIFT_UNAVAILABLE __attribute__((unavailable)) +#endif +#if !defined(SWIFT_UNAVAILABLE_MSG) +# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) +#endif +#if !defined(SWIFT_AVAILABILITY) +# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) +#endif +#if !defined(SWIFT_DEPRECATED) +# define SWIFT_DEPRECATED __attribute__((deprecated)) +#endif +#if !defined(SWIFT_DEPRECATED_MSG) +# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) +#endif +#if __has_feature(attribute_diagnose_if_objc) +# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) +#else +# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) +#endif +#if __has_feature(modules) +#if __has_warning("-Watimport-in-framework-header") +#pragma clang diagnostic ignored "-Watimport-in-framework-header" +#endif +#endif + +#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" +#pragma clang diagnostic ignored "-Wduplicate-method-arg" +#if __has_warning("-Wpragma-clang-attribute") +# pragma clang diagnostic ignored "-Wpragma-clang-attribute" +#endif +#pragma clang diagnostic ignored "-Wunknown-pragmas" +#pragma clang diagnostic ignored "-Wnullability" + +#if __has_attribute(external_source_symbol) +# pragma push_macro("any") +# undef any +# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="PrebuiltStaticFramework",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) +# pragma pop_macro("any") +#endif + +#if __has_attribute(external_source_symbol) +# pragma clang attribute pop +#endif +#pragma clang diagnostic pop diff --git a/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Info.plist b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..3e3dd2d549817af849bc78f57ba26e4d40e9a57b GIT binary patch literal 867 zcmZ`$%}>-o6rUNt@QWQlr)j6?Cio9{ z(~Bn$dh_VblUHvhCf>c77~;YIz_&{qh>2~|_kQp9d#^LUw-HN`YSa8d2QfKx_{h;? zJ;zU+JaxLaMEm*&&J3O%8Xg%P9y>RFp?q;-^3vt0i<4KbdURkm6Eaw2eoI7r+36yW zj#O*2SrkZa^KC9w9P&u7@TO3aNBawI?m71}%{C-IP@E4yDmDdAJUU(|=c7$!3tvM& zOWF;dq>!x@>=FxM!axD*%->>7?zUs7juus?r4pTYIyw3fXR0w`tCl%unI?!!BJK=Givg}xF)9sfX0B41f$jan zc1YJUE2g4TsEQPdQ5z*lpeAY|jmpSH8K4yM56A#~7fE=_2Q+CHanNw6Zo@Y~#`|m6 zDW(MVpj&7GhV7tN=p*`!zN0_57nkugzJu@Mr+5oz_yvB6-{MdB3;v3~;a$>8`pFO( lBje--u}FiglbB>=hrA|l$WQW%?4s^N@LojIdCUX({TB*=1r7iJ literal 0 HcmV?d00001 diff --git a/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/arm64.swiftdoc b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/arm64.swiftdoc new file mode 100644 index 0000000000000000000000000000000000000000..ac18e4fbaa6a1e5a9e6aad49db9aabaffe18165f GIT binary patch literal 388 zcmaDfX9YVW2Lpp90|Ns)qlJ#c+7Dby0=U-%aP4>CT5rI$Ux91Q2d>2%xY!*xUFbQa zy@N^j#3Ahshx9v`wD%m+SaZl(Xp58P1t*OOP8vYc#=uE?50mB6s`bBa4`r z>6vOW>;ak+P?VZfnwe7)T#{Ilne0}Sn44OjUzE)-4=9&dlxt?9n+UQ=H#5K3&`8e+ jD9XUlD#*Y9bS8rln*fg&3xfbi4CF2tP~yq}sz3k$RKadN literal 0 HcmV?d00001 diff --git a/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/arm64.swiftmodule b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/arm64.swiftmodule new file mode 100644 index 0000000000000000000000000000000000000000..ae70c1c73cba0c9c2bd43f32bdd0c833eed903c4 GIT binary patch literal 13944 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 literal 0 HcmV?d00001 diff --git a/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/x86_64.swiftdoc b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/x86_64.swiftdoc new file mode 100644 index 0000000000000000000000000000000000000000..77d723bb4441604652302670aa3246c432bb4a80 GIT binary patch literal 400 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 literal 0 HcmV?d00001 diff --git a/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/module.modulemap b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/module.modulemap new file mode 100644 index 000000000..dc98d5ff4 --- /dev/null +++ b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/module.modulemap @@ -0,0 +1,4 @@ +framework module PrebuiltStaticFramework { + header "PrebuiltStaticFramework-Swift.h" + requires objc +} diff --git a/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/PrebuiltStaticFramework b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/PrebuiltStaticFramework new file mode 100644 index 0000000000000000000000000000000000000000..ea4eff3cfa3f30fcfb975bc0197668cc5bfface0 GIT binary patch literal 28496 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