Skip to content

Commit e759980

Browse files
author
Cosmostima
committed
v1.1.0 Signed release, add unit tests, and bug fixes.
- App is now signed and notarized for direct installation! - Add unit test suite. - Bug fixes.
1 parent 24084dc commit e759980

25 files changed

Lines changed: 2227 additions & 176 deletions

.github/workflows/test.yml

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
name: Unit Tests
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
concurrency:
10+
group: ${{ github.workflow }}-${{ github.ref }}
11+
cancel-in-progress: true
12+
13+
jobs:
14+
test:
15+
name: Unit Tests (macOS)
16+
runs-on: macos-15
17+
18+
steps:
19+
- name: Checkout
20+
uses: actions/checkout@v4
21+
22+
- name: Select Xcode
23+
run: |
24+
# Use the newest Xcode available on the runner
25+
XCODE=$(ls /Applications | grep -E "^Xcode" | sort -V | tail -1)
26+
sudo xcode-select -s "/Applications/${XCODE}"
27+
xcodebuild -version
28+
29+
- name: Run Unit Tests
30+
run: |
31+
set -o pipefail
32+
xcodebuild test \
33+
-project FileRing.xcodeproj \
34+
-scheme FileRing \
35+
-destination 'platform=macOS' \
36+
-enableCodeCoverage YES \
37+
-resultBundlePath TestResults.xcresult \
38+
CODE_SIGN_IDENTITY="-" \
39+
CODE_SIGN_STYLE=Manual \
40+
2>&1 | tee build.log | grep -E "(error:|warning:|passed|failed|TEST)"
41+
# Surface exit code from xcodebuild (pipefail ensures this)
42+
43+
- name: Show coverage summary
44+
if: always()
45+
run: |
46+
if [ -d TestResults.xcresult ]; then
47+
xcrun xccov view --report --only-targets TestResults.xcresult || true
48+
fi
49+
50+
- name: Upload test results
51+
if: always()
52+
uses: actions/upload-artifact@v4
53+
with:
54+
name: TestResults-${{ github.run_number }}
55+
path: |
56+
TestResults.xcresult
57+
build.log
58+
retention-days: 14

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Xcode
22
build/
33
.xcodebuild/
4+
*.xcresult
5+
*.xcarchive
46
*.pbxuser
57
!default.pbxuser
68
*.mode1v3

Assets/supporters.svg

Lines changed: 27 additions & 0 deletions
Loading

FileRing.xcodeproj/project.pbxproj

Lines changed: 142 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,32 @@
66
objectVersion = 77;
77
objects = {
88

9+
/* Begin PBXBuildFile section */
10+
E37EED76ECBFB951AB819749 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA4851E4728B347B124E8AFC /* Cocoa.framework */; };
11+
/* End PBXBuildFile section */
12+
13+
/* Begin PBXContainerItemProxy section */
14+
F1E47481155A7BC640DFFF1E /* PBXContainerItemProxy */ = {
15+
isa = PBXContainerItemProxy;
16+
containerPortal = 49036EF12EB2FC580021BB0A /* Project object */;
17+
proxyType = 1;
18+
remoteGlobalIDString = 49036EF82EB2FC580021BB0A;
19+
remoteInfo = FileRing;
20+
};
21+
/* End PBXContainerItemProxy section */
22+
923
/* Begin PBXFileReference section */
1024
49036EF92EB2FC580021BB0A /* FileRing.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FileRing.app; sourceTree = BUILT_PRODUCTS_DIR; };
25+
A6AC8189DA7D7B5943479FEF /* FileRingTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FileRingTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
26+
FA4851E4728B347B124E8AFC /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.0.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; };
1127
/* End PBXFileReference section */
1228

1329
/* Begin PBXFileSystemSynchronizedRootGroup section */
30+
002ADD9A498281B458472F25 /* FileRingTests */ = {
31+
isa = PBXFileSystemSynchronizedRootGroup;
32+
path = FileRingTests;
33+
sourceTree = "<group>";
34+
};
1435
49036EFB2EB2FC580021BB0A /* FileRing */ = {
1536
isa = PBXFileSystemSynchronizedRootGroup;
1637
path = FileRing;
@@ -19,6 +40,14 @@
1940
/* End PBXFileSystemSynchronizedRootGroup section */
2041

2142
/* Begin PBXFrameworksBuildPhase section */
43+
133236F70C943AD8D7A05645 /* Frameworks */ = {
44+
isa = PBXFrameworksBuildPhase;
45+
buildActionMask = 2147483647;
46+
files = (
47+
E37EED76ECBFB951AB819749 /* Cocoa.framework in Frameworks */,
48+
);
49+
runOnlyForDeploymentPostprocessing = 0;
50+
};
2251
49036EF62EB2FC580021BB0A /* Frameworks */ = {
2352
isa = PBXFrameworksBuildPhase;
2453
buildActionMask = 2147483647;
@@ -34,17 +63,36 @@
3463
children = (
3564
49036EFB2EB2FC580021BB0A /* FileRing */,
3665
49036EFA2EB2FC580021BB0A /* Products */,
66+
E49A854D210433CF562A0DA0 /* Frameworks */,
67+
002ADD9A498281B458472F25 /* FileRingTests */,
3768
);
3869
sourceTree = "<group>";
3970
};
4071
49036EFA2EB2FC580021BB0A /* Products */ = {
4172
isa = PBXGroup;
4273
children = (
4374
49036EF92EB2FC580021BB0A /* FileRing.app */,
75+
A6AC8189DA7D7B5943479FEF /* FileRingTests.xctest */,
4476
);
4577
name = Products;
4678
sourceTree = "<group>";
4779
};
80+
74C04C1114984560BA6463C6 /* OS X */ = {
81+
isa = PBXGroup;
82+
children = (
83+
FA4851E4728B347B124E8AFC /* Cocoa.framework */,
84+
);
85+
name = "OS X";
86+
sourceTree = "<group>";
87+
};
88+
E49A854D210433CF562A0DA0 /* Frameworks */ = {
89+
isa = PBXGroup;
90+
children = (
91+
74C04C1114984560BA6463C6 /* OS X */,
92+
);
93+
name = Frameworks;
94+
sourceTree = "<group>";
95+
};
4896
/* End PBXGroup section */
4997

5098
/* Begin PBXNativeTarget section */
@@ -64,12 +112,31 @@
64112
49036EFB2EB2FC580021BB0A /* FileRing */,
65113
);
66114
name = FileRing;
67-
packageProductDependencies = (
68-
);
69115
productName = PopUp;
70116
productReference = 49036EF92EB2FC580021BB0A /* FileRing.app */;
71117
productType = "com.apple.product-type.application";
72118
};
119+
8EC6CA20288D2A9F68E5DA40 /* FileRingTests */ = {
120+
isa = PBXNativeTarget;
121+
buildConfigurationList = 959A968D28EDBF3165EC6B7C /* Build configuration list for PBXNativeTarget "FileRingTests" */;
122+
buildPhases = (
123+
A0FFA8380B58371C0C413CD2 /* Sources */,
124+
133236F70C943AD8D7A05645 /* Frameworks */,
125+
322C943FA59C7B5C277800E7 /* Resources */,
126+
);
127+
buildRules = (
128+
);
129+
dependencies = (
130+
351104918D071D8757B0414A /* PBXTargetDependency */,
131+
);
132+
fileSystemSynchronizedGroups = (
133+
002ADD9A498281B458472F25 /* FileRingTests */,
134+
);
135+
name = FileRingTests;
136+
productName = FileRingTests;
137+
productReference = A6AC8189DA7D7B5943479FEF /* FileRingTests.xctest */;
138+
productType = "com.apple.product-type.bundle.unit-test";
139+
};
73140
/* End PBXNativeTarget section */
74141

75142
/* Begin PBXProject section */
@@ -100,11 +167,19 @@
100167
projectRoot = "";
101168
targets = (
102169
49036EF82EB2FC580021BB0A /* FileRing */,
170+
8EC6CA20288D2A9F68E5DA40 /* FileRingTests */,
103171
);
104172
};
105173
/* End PBXProject section */
106174

107175
/* Begin PBXResourcesBuildPhase section */
176+
322C943FA59C7B5C277800E7 /* Resources */ = {
177+
isa = PBXResourcesBuildPhase;
178+
buildActionMask = 2147483647;
179+
files = (
180+
);
181+
runOnlyForDeploymentPostprocessing = 0;
182+
};
108183
49036EF72EB2FC580021BB0A /* Resources */ = {
109184
isa = PBXResourcesBuildPhase;
110185
buildActionMask = 2147483647;
@@ -122,9 +197,43 @@
122197
);
123198
runOnlyForDeploymentPostprocessing = 0;
124199
};
200+
A0FFA8380B58371C0C413CD2 /* Sources */ = {
201+
isa = PBXSourcesBuildPhase;
202+
buildActionMask = 2147483647;
203+
files = (
204+
);
205+
runOnlyForDeploymentPostprocessing = 0;
206+
};
125207
/* End PBXSourcesBuildPhase section */
126208

209+
/* Begin PBXTargetDependency section */
210+
351104918D071D8757B0414A /* PBXTargetDependency */ = {
211+
isa = PBXTargetDependency;
212+
name = FileRing;
213+
target = 49036EF82EB2FC580021BB0A /* FileRing */;
214+
targetProxy = F1E47481155A7BC640DFFF1E /* PBXContainerItemProxy */;
215+
};
216+
/* End PBXTargetDependency section */
217+
127218
/* Begin XCBuildConfiguration section */
219+
091488C7AFF11758B9BD2F81 /* Release */ = {
220+
isa = XCBuildConfiguration;
221+
buildSettings = {
222+
BUNDLE_LOADER = "$(TEST_HOST)";
223+
CODE_SIGN_STYLE = Automatic;
224+
DEVELOPMENT_TEAM = "";
225+
ENABLE_TESTABILITY = YES;
226+
GENERATE_INFOPLIST_FILE = YES;
227+
MACOSX_DEPLOYMENT_TARGET = 13.0;
228+
PRODUCT_BUNDLE_IDENTIFIER = com.cosmos.FileRing.tests;
229+
PRODUCT_MODULE_NAME = FileRingTests;
230+
PRODUCT_NAME = FileRingTests;
231+
SDKROOT = macosx;
232+
SWIFT_VERSION = 5.0;
233+
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FileRing.app/Contents/MacOS/FileRing";
234+
};
235+
name = Release;
236+
};
128237
49036F022EB2FC580021BB0A /* Debug */ = {
129238
isa = XCBuildConfiguration;
130239
buildSettings = {
@@ -281,7 +390,7 @@
281390
"@executable_path/../Frameworks",
282391
);
283392
MACOSX_DEPLOYMENT_TARGET = 13.0;
284-
MARKETING_VERSION = 1.0.7;
393+
MARKETING_VERSION = 1.1.0;
285394
PRODUCT_BUNDLE_IDENTIFIER = com.cosmos.FileRing;
286395
PRODUCT_NAME = "$(TARGET_NAME)";
287396
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -337,7 +446,7 @@
337446
"@executable_path/../Frameworks",
338447
);
339448
MACOSX_DEPLOYMENT_TARGET = 13.0;
340-
MARKETING_VERSION = 1.0.7;
449+
MARKETING_VERSION = 1.1.0;
341450
PRODUCT_BUNDLE_IDENTIFIER = com.cosmos.FileRing;
342451
PRODUCT_NAME = "$(TARGET_NAME)";
343452
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -357,6 +466,26 @@
357466
};
358467
name = Release;
359468
};
469+
525940A25E2111B1F4EC1FAF /* Debug */ = {
470+
isa = XCBuildConfiguration;
471+
buildSettings = {
472+
BUNDLE_LOADER = "$(TEST_HOST)";
473+
CODE_SIGN_STYLE = Automatic;
474+
DEVELOPMENT_TEAM = "";
475+
ENABLE_TESTABILITY = YES;
476+
GENERATE_INFOPLIST_FILE = YES;
477+
MACOSX_DEPLOYMENT_TARGET = 13.0;
478+
PRODUCT_BUNDLE_IDENTIFIER = com.cosmos.FileRing.tests;
479+
PRODUCT_MODULE_NAME = FileRingTests;
480+
PRODUCT_NAME = FileRingTests;
481+
SDKROOT = macosx;
482+
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
483+
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
484+
SWIFT_VERSION = 5.0;
485+
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FileRing.app/Contents/MacOS/FileRing";
486+
};
487+
name = Debug;
488+
};
360489
/* End XCBuildConfiguration section */
361490

362491
/* Begin XCConfigurationList section */
@@ -378,6 +507,15 @@
378507
defaultConfigurationIsVisible = 0;
379508
defaultConfigurationName = Release;
380509
};
510+
959A968D28EDBF3165EC6B7C /* Build configuration list for PBXNativeTarget "FileRingTests" */ = {
511+
isa = XCConfigurationList;
512+
buildConfigurations = (
513+
091488C7AFF11758B9BD2F81 /* Release */,
514+
525940A25E2111B1F4EC1FAF /* Debug */,
515+
);
516+
defaultConfigurationIsVisible = 0;
517+
defaultConfigurationName = Release;
518+
};
381519
/* End XCConfigurationList section */
382520
};
383521
rootObject = 49036EF12EB2FC580021BB0A /* Project object */;

FileRing.xcodeproj/xcshareddata/xcschemes/FileRing.xcscheme

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,20 @@
2121
ReferencedContainer = "container:FileRing.xcodeproj">
2222
</BuildableReference>
2323
</BuildActionEntry>
24+
<BuildActionEntry
25+
buildForTesting = "YES"
26+
buildForRunning = "NO"
27+
buildForProfiling = "NO"
28+
buildForArchiving = "NO"
29+
buildForAnalyzing = "YES">
30+
<BuildableReference
31+
BuildableIdentifier = "primary"
32+
BlueprintIdentifier = "8EC6CA20288D2A9F68E5DA40"
33+
BuildableName = "FileRingTests.xctest"
34+
BlueprintName = "FileRingTests"
35+
ReferencedContainer = "container:FileRing.xcodeproj">
36+
</BuildableReference>
37+
</BuildActionEntry>
2438
</BuildActionEntries>
2539
</BuildAction>
2640
<TestAction
@@ -29,6 +43,19 @@
2943
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
3044
shouldUseLaunchSchemeArgsEnv = "YES"
3145
shouldAutocreateTestPlan = "YES">
46+
<Testables>
47+
<TestableReference
48+
skipped = "NO"
49+
parallelizable = "YES">
50+
<BuildableReference
51+
BuildableIdentifier = "primary"
52+
BlueprintIdentifier = "8EC6CA20288D2A9F68E5DA40"
53+
BuildableName = "FileRingTests.xctest"
54+
BlueprintName = "FileRingTests"
55+
ReferencedContainer = "container:FileRing.xcodeproj">
56+
</BuildableReference>
57+
</TestableReference>
58+
</Testables>
3259
</TestAction>
3360
<LaunchAction
3461
buildConfiguration = "Debug"

0 commit comments

Comments
 (0)