Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -163,3 +163,28 @@ jobs:
- name: Build example for iOS
run: |
yarn turbo run build:ios --cache-dir="${{ env.TURBO_CACHE_DIR }}"

test-ios:
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup
uses: ./.github/actions/setup

- name: Pick an iPhone simulator
run: |
UDID=$(xcrun simctl list devices available | grep -m1 -oE 'iPhone[^(]*\([0-9A-F-]{36}\)' | grep -oE '[0-9A-F-]{36}')
echo "IOS_DESTINATION=id=$UDID" >> "$GITHUB_ENV"

- name: Run Swift core tests
run: yarn test:ios

- name: Install cocoapods
run: |
cd example/ios
pod install

- name: Run native tests hosted in the example app
run: yarn test:ios:example
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ jsconfig.json
# Xcode
#
build/
ios-tests/.build/
ios-tests/.swiftpm/
*.pbxuser
!default.pbxuser
*.mode1v3
Expand Down
159 changes: 159 additions & 0 deletions example/ios/AutoSkeletonExample.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,41 @@
/* Begin PBXBuildFile section */
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
1BBD1C960118A48349FDBFA6 /* libPods-AutoSkeletonExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A6FE202C403EFAE2D69DE4C6 /* libPods-AutoSkeletonExample.a */; };
217E1F6524FCDAC0A16F709F /* libPods-AutoSkeletonExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 093A718BB19335CD078DD231 /* libPods-AutoSkeletonExampleTests.a */; };
64D7A9FA8D9C7AADB9EAF59A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9194C1DFBB980F7421FD53BE /* Foundation.framework */; };
761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
9AA9391065FDB14244B1EF3C /* AutoSkeletonViewTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = A40F661816911C062B22E12B /* AutoSkeletonViewTests.mm */; };
C090EC147B18AC3F6301659F /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; };
FA18FF012D90C63B00432021 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA18FF002D90C63B00432021 /* File.swift */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
59DF82BEA95DA4E57CB09831 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
remoteInfo = AutoSkeletonExample;
};
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
093A718BB19335CD078DD231 /* libPods-AutoSkeletonExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AutoSkeletonExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
13B07F961A680F5B00A75B9A /* AutoSkeletonExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AutoSkeletonExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = AutoSkeletonExample/Images.xcassets; sourceTree = "<group>"; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = AutoSkeletonExample/Info.plist; sourceTree = "<group>"; };
13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = AutoSkeletonExample/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
336A408DCB9915B1C177D7FD /* Pods-AutoSkeletonExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AutoSkeletonExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-AutoSkeletonExampleTests/Pods-AutoSkeletonExampleTests.debug.xcconfig"; sourceTree = "<group>"; };
3B4392A12AC88292D35C810B /* Pods-AutoSkeletonExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AutoSkeletonExample.debug.xcconfig"; path = "Target Support Files/Pods-AutoSkeletonExample/Pods-AutoSkeletonExample.debug.xcconfig"; sourceTree = "<group>"; };
5709B34CF0A7D63546082F79 /* Pods-AutoSkeletonExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AutoSkeletonExample.release.xcconfig"; path = "Target Support Files/Pods-AutoSkeletonExample/Pods-AutoSkeletonExample.release.xcconfig"; sourceTree = "<group>"; };
761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = AutoSkeletonExample/AppDelegate.swift; sourceTree = "<group>"; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = AutoSkeletonExample/LaunchScreen.storyboard; sourceTree = "<group>"; };
9194C1DFBB980F7421FD53BE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
98C39D7BC9428BE2274855BE /* AutoSkeletonExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AutoSkeletonExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
A40F661816911C062B22E12B /* AutoSkeletonViewTests.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = AutoSkeletonViewTests.mm; sourceTree = "<group>"; };
A6FE202C403EFAE2D69DE4C6 /* libPods-AutoSkeletonExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AutoSkeletonExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
CC0AE457AA2AD80297768FFF /* Pods-AutoSkeletonExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AutoSkeletonExampleTests.release.xcconfig"; path = "Target Support Files/Pods-AutoSkeletonExampleTests/Pods-AutoSkeletonExampleTests.release.xcconfig"; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
FA18FF002D90C63B00432021 /* File.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = "<group>"; };
FA18FF022D90C65F00432021 /* AutoSkeletonExample-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "AutoSkeletonExample-Bridging-Header.h"; sourceTree = "<group>"; };
Expand All @@ -39,6 +58,15 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
A0D9FC514F84AC47C99F4CC7 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
64D7A9FA8D9C7AADB9EAF59A /* Foundation.framework in Frameworks */,
217E1F6524FCDAC0A16F709F /* libPods-AutoSkeletonExampleTests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
Expand All @@ -61,10 +89,21 @@
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
A6FE202C403EFAE2D69DE4C6 /* libPods-AutoSkeletonExample.a */,
F329F1BB80E9E7A3F3D62E10 /* iOS */,
093A718BB19335CD078DD231 /* libPods-AutoSkeletonExampleTests.a */,
);
name = Frameworks;
sourceTree = "<group>";
};
31310E7F3CB09FB572A54060 /* AutoSkeletonExampleTests */ = {
isa = PBXGroup;
children = (
A40F661816911C062B22E12B /* AutoSkeletonViewTests.mm */,
);
name = AutoSkeletonExampleTests;
path = AutoSkeletonExampleTests;
sourceTree = "<group>";
};
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
isa = PBXGroup;
children = (
Expand All @@ -80,6 +119,7 @@
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
BBD78D7AC51CEA395F1C20DB /* Pods */,
31310E7F3CB09FB572A54060 /* AutoSkeletonExampleTests */,
);
indentWidth = 2;
sourceTree = "<group>";
Expand All @@ -90,6 +130,7 @@
isa = PBXGroup;
children = (
13B07F961A680F5B00A75B9A /* AutoSkeletonExample.app */,
98C39D7BC9428BE2274855BE /* AutoSkeletonExampleTests.xctest */,
);
name = Products;
sourceTree = "<group>";
Expand All @@ -99,10 +140,20 @@
children = (
3B4392A12AC88292D35C810B /* Pods-AutoSkeletonExample.debug.xcconfig */,
5709B34CF0A7D63546082F79 /* Pods-AutoSkeletonExample.release.xcconfig */,
CC0AE457AA2AD80297768FFF /* Pods-AutoSkeletonExampleTests.release.xcconfig */,
336A408DCB9915B1C177D7FD /* Pods-AutoSkeletonExampleTests.debug.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
F329F1BB80E9E7A3F3D62E10 /* iOS */ = {
isa = PBXGroup;
children = (
9194C1DFBB980F7421FD53BE /* Foundation.framework */,
);
name = iOS;
sourceTree = "<group>";
};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
Expand All @@ -127,6 +178,25 @@
productReference = 13B07F961A680F5B00A75B9A /* AutoSkeletonExample.app */;
productType = "com.apple.product-type.application";
};
913176E6D028B29379806C68 /* AutoSkeletonExampleTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 8368E4421051201E6F2D42D4 /* Build configuration list for PBXNativeTarget "AutoSkeletonExampleTests" */;
buildPhases = (
DE82905AE2D1A5F817590B20 /* [CP] Check Pods Manifest.lock */,
5ADFC514898E1EDA5C47A630 /* Sources */,
A0D9FC514F84AC47C99F4CC7 /* Frameworks */,
55E8238BE0B16574097816F9 /* Resources */,
);
buildRules = (
);
dependencies = (
2EFD0ABFEEE9A88F4370A70C /* PBXTargetDependency */,
);
name = AutoSkeletonExampleTests;
productName = AutoSkeletonExampleTests;
productReference = 98C39D7BC9428BE2274855BE /* AutoSkeletonExampleTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
Expand Down Expand Up @@ -154,6 +224,7 @@
projectRoot = "";
targets = (
13B07F861A680F5B00A75B9A /* AutoSkeletonExample */,
913176E6D028B29379806C68 /* AutoSkeletonExampleTests */,
);
};
/* End PBXProject section */
Expand All @@ -169,6 +240,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
55E8238BE0B16574097816F9 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */

/* Begin PBXShellScriptBuildPhase section */
Expand Down Expand Up @@ -227,6 +305,28 @@
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;
};
DE82905AE2D1A5F817590B20 /* [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-AutoSkeletonExampleTests-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;
};
E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
Expand Down Expand Up @@ -256,8 +356,25 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
5ADFC514898E1EDA5C47A630 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
9AA9391065FDB14244B1EF3C /* AutoSkeletonViewTests.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */

/* Begin PBXTargetDependency section */
2EFD0ABFEEE9A88F4370A70C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = AutoSkeletonExample;
target = 13B07F861A680F5B00A75B9A /* AutoSkeletonExample */;
targetProxy = 59DF82BEA95DA4E57CB09831 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */

/* Begin XCBuildConfiguration section */
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
Expand Down Expand Up @@ -491,6 +608,39 @@
};
name = Release;
};
872306C3800130B990BE8086 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = CC0AE457AA2AD80297768FFF /* Pods-AutoSkeletonExampleTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ENABLE_OBJC_WEAK = NO;
CODE_SIGNING_ALLOWED = NO;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
PRODUCT_BUNDLE_IDENTIFIER = autoskeleton.example.tests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AutoSkeletonExample.app/AutoSkeletonExample";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
B50E2EAC3DC96A361D72FFDB /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 336A408DCB9915B1C177D7FD /* Pods-AutoSkeletonExampleTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ENABLE_OBJC_WEAK = NO;
CODE_SIGNING_ALLOWED = NO;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
PRODUCT_BUNDLE_IDENTIFIER = autoskeleton.example.tests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AutoSkeletonExample.app/AutoSkeletonExample";
};
name = Debug;
};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
Expand All @@ -503,6 +653,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
8368E4421051201E6F2D42D4 /* Build configuration list for PBXNativeTarget "AutoSkeletonExampleTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
872306C3800130B990BE8086 /* Release */,
B50E2EAC3DC96A361D72FFDB /* Debug */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "AutoSkeletonExample" */ = {
isa = XCConfigurationList;
buildConfigurations = (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,16 @@
ReferencedContainer = "container:AutoSkeletonExample.xcodeproj">
</BuildableReference>
</TestableReference>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "913176E6D028B29379806C68"
BuildableName = "AutoSkeletonExampleTests.xctest"
BlueprintName = "AutoSkeletonExampleTests"
ReferencedContainer = "container:AutoSkeletonExample.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
Expand Down
Loading
Loading