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 000000000..3e3dd2d54 Binary files /dev/null and b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Info.plist differ 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 000000000..ac18e4fba Binary files /dev/null and b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/arm64.swiftdoc differ 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 000000000..ae70c1c73 Binary files /dev/null and b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/arm64.swiftmodule differ 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 000000000..77d723bb4 Binary files /dev/null and b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/x86_64.swiftdoc differ diff --git a/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/x86_64.swiftmodule b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/x86_64.swiftmodule new file mode 100644 index 000000000..e71752a26 Binary files /dev/null and b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/Modules/PrebuiltStaticFramework.swiftmodule/x86_64.swiftmodule differ 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 000000000..ea4eff3cf Binary files /dev/null and b/fixtures/ios_app_with_static_frameworks/Prebuilt/prebuilt/PrebuiltStaticFramework.framework/PrebuiltStaticFramework differ diff --git a/fixtures/ios_app_with_static_frameworks/Project.swift b/fixtures/ios_app_with_static_frameworks/Project.swift index 177ac476b..c447f559b 100755 --- a/fixtures/ios_app_with_static_frameworks/Project.swift +++ b/fixtures/ios_app_with_static_frameworks/Project.swift @@ -1,6 +1,6 @@ import ProjectDescription -let project = Project(name: "iOSAppWithTransistiveStaticFrameworks", +let project = Project(name: "App", targets: [ Target(name: "App", platform: .iOS, @@ -11,6 +11,7 @@ let project = Project(name: "iOSAppWithTransistiveStaticFrameworks", dependencies: [ .project(target: "A", path: "Modules/A"), .project(target: "C", path: "Modules/C"), + .framework(path: "Prebuilt/prebuilt/PrebuiltStaticFramework.framework") ]), Target(name: "AppTests", platform: .iOS, diff --git a/fixtures/ios_app_with_static_frameworks/Sources/AppDelegate.swift b/fixtures/ios_app_with_static_frameworks/Sources/AppDelegate.swift index c309a618f..0477a2e87 100755 --- a/fixtures/ios_app_with_static_frameworks/Sources/AppDelegate.swift +++ b/fixtures/ios_app_with_static_frameworks/Sources/AppDelegate.swift @@ -1,6 +1,7 @@ import A import C import UIKit +import PrebuiltStaticFramework @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { @@ -15,6 +16,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate { A.printFromA() C.printFromC() + + let staticFrameworkClass = StaticFrameworkClass() + print(staticFrameworkClass.hello()) return true }