diff --git a/.gitignore b/.gitignore
index cac804d..75b4dfa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,4 @@ DerivedData
*.hmap
*.ipa
*.xcuserstate
+.build/
\ No newline at end of file
diff --git a/SwiftyAcknowledgements.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
similarity index 65%
rename from SwiftyAcknowledgements.xcodeproj/project.xcworkspace/contents.xcworkspacedata
rename to .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
index a3268e4..919434a 100644
--- a/SwiftyAcknowledgements.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
@@ -2,6 +2,6 @@
+ location = "self:">
diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/GenerateLicenseFile.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/GenerateLicenseFile.xcscheme
new file mode 100644
index 0000000..1fadcee
--- /dev/null
+++ b/.swiftpm/xcode/xcshareddata/xcschemes/GenerateLicenseFile.xcscheme
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/GenerateLicenseFileExe.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/GenerateLicenseFileExe.xcscheme
new file mode 100644
index 0000000..b0193df
--- /dev/null
+++ b/.swiftpm/xcode/xcshareddata/xcschemes/GenerateLicenseFileExe.xcscheme
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/SwiftyAcknowledgements-Package.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/SwiftyAcknowledgements-Package.xcscheme
new file mode 100644
index 0000000..0e8b5c9
--- /dev/null
+++ b/.swiftpm/xcode/xcshareddata/xcschemes/SwiftyAcknowledgements-Package.xcscheme
@@ -0,0 +1,195 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/SwiftyAcknowledgements.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/SwiftyAcknowledgements.xcscheme
new file mode 100644
index 0000000..b3c65e0
--- /dev/null
+++ b/.swiftpm/xcode/xcshareddata/xcschemes/SwiftyAcknowledgements.xcscheme
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Examples/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/Examples/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/Examples/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Libraries/Library 1/LICENSE.txt b/Examples/Libraries/Library 1/LICENSE.txt
similarity index 100%
rename from Libraries/Library 1/LICENSE.txt
rename to Examples/Libraries/Library 1/LICENSE.txt
diff --git a/Libraries/Library 2/LICENSE.txt b/Examples/Libraries/Library 2/LICENSE.txt
similarity index 100%
rename from Libraries/Library 2/LICENSE.txt
rename to Examples/Libraries/Library 2/LICENSE.txt
diff --git a/Libraries/Library 3/Subfolder/LICENSE b/Examples/Libraries/Library 3/Subfolder/LICENSE
similarity index 100%
rename from Libraries/Library 3/Subfolder/LICENSE
rename to Examples/Libraries/Library 3/Subfolder/LICENSE
diff --git a/SwiftyAcknowledgements.xcodeproj/project.pbxproj b/Examples/SwiftyAcknowledgements.xcodeproj/project.pbxproj
similarity index 53%
rename from SwiftyAcknowledgements.xcodeproj/project.pbxproj
rename to Examples/SwiftyAcknowledgements.xcodeproj/project.pbxproj
index 73ebed5..8228453 100644
--- a/SwiftyAcknowledgements.xcodeproj/project.pbxproj
+++ b/Examples/SwiftyAcknowledgements.xcodeproj/project.pbxproj
@@ -3,40 +3,18 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 46;
+ objectVersion = 60;
objects = {
/* Begin PBXBuildFile section */
- 524F34CE1BE248EE00784625 /* AcknowledgementsTableViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 524F34CD1BE248EE00784625 /* AcknowledgementsTableViewControllerTests.swift */; };
- 524F34CF1BE248EE00784625 /* AcknowledgementsTableViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 524F34CD1BE248EE00784625 /* AcknowledgementsTableViewControllerTests.swift */; };
- 524F34D11BE2491800784625 /* BaseTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 524F34D01BE2491800784625 /* BaseTestCase.swift */; };
- 524F34D21BE2491800784625 /* BaseTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 524F34D01BE2491800784625 /* BaseTestCase.swift */; };
- 527046721BE0EE86004CD4FC /* UIFontDescriptorExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527046711BE0EE86004CD4FC /* UIFontDescriptorExtensions.swift */; };
- 527046731BE0EE86004CD4FC /* UIFontDescriptorExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527046711BE0EE86004CD4FC /* UIFontDescriptorExtensions.swift */; };
- 5270467E1BE203CB004CD4FC /* AcknowledgementTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5270467D1BE203CB004CD4FC /* AcknowledgementTests.swift */; };
- 527046801BE203CB004CD4FC /* SwiftyAcknowledgements.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52FC37771B9F6A0A005EFE87 /* SwiftyAcknowledgements.framework */; };
- 5270468F1BE204A1004CD4FC /* SwiftyAcknowledgements.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52AAE6231BDF87B9007EB44A /* SwiftyAcknowledgements.framework */; };
- 527046951BE204C4004CD4FC /* AcknowledgementTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5270467D1BE203CB004CD4FC /* AcknowledgementTests.swift */; };
- 527046991BE2064B004CD4FC /* Acknowledgements.plist in Resources */ = {isa = PBXBuildFile; fileRef = 527046981BE2064B004CD4FC /* Acknowledgements.plist */; };
- 5270469A1BE2064B004CD4FC /* Acknowledgements.plist in Resources */ = {isa = PBXBuildFile; fileRef = 527046981BE2064B004CD4FC /* Acknowledgements.plist */; };
+ 33189B402C91685600E2E4F4 /* SwiftyAcknowledgements in Frameworks */ = {isa = PBXBuildFile; productRef = 33189B3F2C91685600E2E4F4 /* SwiftyAcknowledgements */; };
+ 33189B432C916B0800E2E4F4 /* SwiftyAcknowledgements in Frameworks */ = {isa = PBXBuildFile; productRef = 33189B422C916B0800E2E4F4 /* SwiftyAcknowledgements */; };
5275A9AA1B9F6F99007AD576 /* Acknowledgements.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5275A9A91B9F6F99007AD576 /* Acknowledgements.plist */; };
- 52AAE62B1BDF87F5007EB44A /* Acknowledgement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52FC37831B9F6A94005EFE87 /* Acknowledgement.swift */; };
- 52AAE62C1BDF87F5007EB44A /* AcknowledgementsTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52FC37841B9F6A94005EFE87 /* AcknowledgementsTableViewController.swift */; };
- 52AAE62D1BDF87F5007EB44A /* AcknowledgementViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52FC37851B9F6A94005EFE87 /* AcknowledgementViewController.swift */; };
- 52AAE62E1BDF87F5007EB44A /* SwiftyAcknowledgements.h in Headers */ = {isa = PBXBuildFile; fileRef = 52FC377A1B9F6A0A005EFE87 /* SwiftyAcknowledgements.h */; settings = {ATTRIBUTES = (Public, ); }; };
52AAE6371BDF9A51007EB44A /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52AAE6361BDF9A51007EB44A /* AppDelegate.swift */; };
52AAE6391BDF9A51007EB44A /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52AAE6381BDF9A51007EB44A /* ViewController.swift */; };
52AAE63C1BDF9A51007EB44A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 52AAE63A1BDF9A51007EB44A /* Main.storyboard */; };
52AAE63E1BDF9A51007EB44A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 52AAE63D1BDF9A51007EB44A /* Assets.xcassets */; };
- 52AAE6431BDF9AB0007EB44A /* SwiftyAcknowledgements.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52AAE6231BDF87B9007EB44A /* SwiftyAcknowledgements.framework */; };
- 52AAE6441BDF9AB0007EB44A /* SwiftyAcknowledgements.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 52AAE6231BDF87B9007EB44A /* SwiftyAcknowledgements.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
52AAE64A1BDFAB27007EB44A /* Acknowledgements.plist in Resources */ = {isa = PBXBuildFile; fileRef = 52AAE6491BDFAB27007EB44A /* Acknowledgements.plist */; };
- 52E10E141BDE37C200C6176A /* SwiftyAcknowledgements.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52FC37771B9F6A0A005EFE87 /* SwiftyAcknowledgements.framework */; };
- 52E10E151BDE37C200C6176A /* SwiftyAcknowledgements.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 52FC37771B9F6A0A005EFE87 /* SwiftyAcknowledgements.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- 52FC377B1B9F6A0A005EFE87 /* SwiftyAcknowledgements.h in Headers */ = {isa = PBXBuildFile; fileRef = 52FC377A1B9F6A0A005EFE87 /* SwiftyAcknowledgements.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 52FC37861B9F6A94005EFE87 /* Acknowledgement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52FC37831B9F6A94005EFE87 /* Acknowledgement.swift */; };
- 52FC37871B9F6A94005EFE87 /* AcknowledgementsTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52FC37841B9F6A94005EFE87 /* AcknowledgementsTableViewController.swift */; };
- 52FC37881B9F6A94005EFE87 /* AcknowledgementViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52FC37851B9F6A94005EFE87 /* AcknowledgementViewController.swift */; };
52FC37901B9F6BEF005EFE87 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52FC378F1B9F6BEF005EFE87 /* AppDelegate.swift */; };
52FC37921B9F6BEF005EFE87 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52FC37911B9F6BEF005EFE87 /* ViewController.swift */; };
52FC37951B9F6BEF005EFE87 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 52FC37931B9F6BEF005EFE87 /* Main.storyboard */; };
@@ -44,45 +22,22 @@
52FC379A1B9F6BEF005EFE87 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 52FC37981B9F6BEF005EFE87 /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */
-/* Begin PBXContainerItemProxy section */
- 527046811BE203CB004CD4FC /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 52FC376E1B9F6A0A005EFE87 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 52FC37761B9F6A0A005EFE87;
- remoteInfo = "SwiftyAcknowledgements iOS";
- };
- 527046901BE204A1004CD4FC /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 52FC376E1B9F6A0A005EFE87 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 52AAE6221BDF87B9007EB44A;
- remoteInfo = "SwiftyAcknowledgements tvOS";
- };
- 5275A9AB1B9F6FA9007AD576 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 52FC376E1B9F6A0A005EFE87 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 52FC37761B9F6A0A005EFE87;
- remoteInfo = SwiftyAcknowledgements;
- };
- 52AAE6451BDF9AB0007EB44A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 52FC376E1B9F6A0A005EFE87 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 52AAE6221BDF87B9007EB44A;
- remoteInfo = "SwiftyAcknowledgements tvOS";
- };
-/* End PBXContainerItemProxy section */
-
/* Begin PBXCopyFilesBuildPhase section */
+ 33D1BC0F25C696C700B3D1D4 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 7;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
52AAE6471BDF9AB0007EB44A /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
- 52AAE6441BDF9AB0007EB44A /* SwiftyAcknowledgements.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -93,7 +48,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- 52E10E151BDE37C200C6176A /* SwiftyAcknowledgements.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -101,16 +55,9 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
- 524F34CD1BE248EE00784625 /* AcknowledgementsTableViewControllerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AcknowledgementsTableViewControllerTests.swift; sourceTree = ""; };
- 524F34D01BE2491800784625 /* BaseTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseTestCase.swift; sourceTree = ""; };
- 527046711BE0EE86004CD4FC /* UIFontDescriptorExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIFontDescriptorExtensions.swift; sourceTree = ""; };
5270467B1BE203CB004CD4FC /* SwiftyAcknowledgements iOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SwiftyAcknowledgements iOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
- 5270467D1BE203CB004CD4FC /* AcknowledgementTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AcknowledgementTests.swift; sourceTree = ""; };
- 5270467F1BE203CB004CD4FC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
5270468A1BE204A1004CD4FC /* SwiftyAcknowledgements tvOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SwiftyAcknowledgements tvOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
- 527046981BE2064B004CD4FC /* Acknowledgements.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Acknowledgements.plist; sourceTree = ""; };
5275A9A91B9F6F99007AD576 /* Acknowledgements.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Acknowledgements.plist; sourceTree = ""; };
- 52AAE6231BDF87B9007EB44A /* SwiftyAcknowledgements.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyAcknowledgements.framework; sourceTree = BUILT_PRODUCTS_DIR; };
52AAE6341BDF9A51007EB44A /* tvOS Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "tvOS Example.app"; sourceTree = BUILT_PRODUCTS_DIR; };
52AAE6361BDF9A51007EB44A /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
52AAE6381BDF9A51007EB44A /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
@@ -118,12 +65,6 @@
52AAE63D1BDF9A51007EB44A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
52AAE63F1BDF9A51007EB44A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
52AAE6491BDFAB27007EB44A /* Acknowledgements.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Acknowledgements.plist; sourceTree = ""; };
- 52FC37771B9F6A0A005EFE87 /* SwiftyAcknowledgements.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyAcknowledgements.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 52FC377A1B9F6A0A005EFE87 /* SwiftyAcknowledgements.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftyAcknowledgements.h; sourceTree = ""; };
- 52FC377C1B9F6A0A005EFE87 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 52FC37831B9F6A94005EFE87 /* Acknowledgement.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Acknowledgement.swift; sourceTree = ""; };
- 52FC37841B9F6A94005EFE87 /* AcknowledgementsTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AcknowledgementsTableViewController.swift; sourceTree = ""; };
- 52FC37851B9F6A94005EFE87 /* AcknowledgementViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AcknowledgementViewController.swift; sourceTree = ""; };
52FC378D1B9F6BEF005EFE87 /* iOS Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iOS Example.app"; sourceTree = BUILT_PRODUCTS_DIR; };
52FC378F1B9F6BEF005EFE87 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
52FC37911B9F6BEF005EFE87 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
@@ -138,19 +79,10 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 527046801BE203CB004CD4FC /* SwiftyAcknowledgements.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
527046871BE204A1004CD4FC /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 5270468F1BE204A1004CD4FC /* SwiftyAcknowledgements.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 52AAE61F1BDF87B9007EB44A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -161,14 +93,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 52AAE6431BDF9AB0007EB44A /* SwiftyAcknowledgements.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 52FC37731B9F6A0A005EFE87 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
+ 33189B432C916B0800E2E4F4 /* SwiftyAcknowledgements in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -176,47 +101,45 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 52E10E141BDE37C200C6176A /* SwiftyAcknowledgements.framework in Frameworks */,
+ 33189B402C91685600E2E4F4 /* SwiftyAcknowledgements in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 5270467C1BE203CB004CD4FC /* Tests */ = {
+ 33189B3B2C9166D000E2E4F4 /* iOS Example */ = {
isa = PBXGroup;
children = (
- 524F34D01BE2491800784625 /* BaseTestCase.swift */,
- 5270467D1BE203CB004CD4FC /* AcknowledgementTests.swift */,
- 524F34CD1BE248EE00784625 /* AcknowledgementsTableViewControllerTests.swift */,
- 5270469B1BE20680004CD4FC /* Resources */,
- 5270469D1BE206C6004CD4FC /* Supporting Files */,
- );
- path = Tests;
- sourceTree = SOURCE_ROOT;
- };
- 5270469B1BE20680004CD4FC /* Resources */ = {
- isa = PBXGroup;
- children = (
- 527046981BE2064B004CD4FC /* Acknowledgements.plist */,
+ 52FC378F1B9F6BEF005EFE87 /* AppDelegate.swift */,
+ 52FC37911B9F6BEF005EFE87 /* ViewController.swift */,
+ 52FC37931B9F6BEF005EFE87 /* Main.storyboard */,
+ 52FC37961B9F6BEF005EFE87 /* Assets.xcassets */,
+ 52FC37981B9F6BEF005EFE87 /* LaunchScreen.storyboard */,
+ 5270469F1BE20701004CD4FC /* Resources */,
+ 527046A01BE20705004CD4FC /* Supporting Files */,
);
- path = Resources;
+ path = "iOS Example";
sourceTree = "";
};
- 5270469D1BE206C6004CD4FC /* Supporting Files */ = {
+ 33189B3C2C9166E000E2E4F4 /* tvOS Example */ = {
isa = PBXGroup;
children = (
- 5270467F1BE203CB004CD4FC /* Info.plist */,
+ 52AAE6361BDF9A51007EB44A /* AppDelegate.swift */,
+ 52AAE6381BDF9A51007EB44A /* ViewController.swift */,
+ 52AAE63A1BDF9A51007EB44A /* Main.storyboard */,
+ 52AAE63D1BDF9A51007EB44A /* Assets.xcassets */,
+ 527046A11BE2070B004CD4FC /* Resources */,
+ 527046A21BE20710004CD4FC /* Supporting Files */,
);
- path = "Supporting Files";
+ path = "tvOS Example";
sourceTree = "";
};
- 5270469E1BE206D5004CD4FC /* Supporting Files */ = {
+ 33189B412C916B0800E2E4F4 /* Frameworks */ = {
isa = PBXGroup;
children = (
- 52FC377C1B9F6A0A005EFE87 /* Info.plist */,
);
- path = "Supporting Files";
+ name = Frameworks;
sourceTree = "";
};
5270469F1BE20701004CD4FC /* Resources */ = {
@@ -251,27 +174,12 @@
path = "Supporting Files";
sourceTree = "";
};
- 52AAE6351BDF9A51007EB44A /* tvOS Example */ = {
- isa = PBXGroup;
- children = (
- 52AAE6361BDF9A51007EB44A /* AppDelegate.swift */,
- 52AAE6381BDF9A51007EB44A /* ViewController.swift */,
- 52AAE63A1BDF9A51007EB44A /* Main.storyboard */,
- 52AAE63D1BDF9A51007EB44A /* Assets.xcassets */,
- 527046A11BE2070B004CD4FC /* Resources */,
- 527046A21BE20710004CD4FC /* Supporting Files */,
- );
- name = "tvOS Example";
- path = "Examples/tvOS Example";
- sourceTree = "";
- };
52FC376D1B9F6A0A005EFE87 = {
isa = PBXGroup;
children = (
- 52FC37791B9F6A0A005EFE87 /* SwiftyAcknowledgements */,
- 5270467C1BE203CB004CD4FC /* Tests */,
- 52FC378E1B9F6BEF005EFE87 /* iOS Example */,
- 52AAE6351BDF9A51007EB44A /* tvOS Example */,
+ 33189B3B2C9166D000E2E4F4 /* iOS Example */,
+ 33189B3C2C9166E000E2E4F4 /* tvOS Example */,
+ 33189B412C916B0800E2E4F4 /* Frameworks */,
52FC37781B9F6A0A005EFE87 /* Products */,
);
sourceTree = "";
@@ -279,9 +187,7 @@
52FC37781B9F6A0A005EFE87 /* Products */ = {
isa = PBXGroup;
children = (
- 52FC37771B9F6A0A005EFE87 /* SwiftyAcknowledgements.framework */,
52FC378D1B9F6BEF005EFE87 /* iOS Example.app */,
- 52AAE6231BDF87B9007EB44A /* SwiftyAcknowledgements.framework */,
52AAE6341BDF9A51007EB44A /* tvOS Example.app */,
5270467B1BE203CB004CD4FC /* SwiftyAcknowledgements iOS Tests.xctest */,
5270468A1BE204A1004CD4FC /* SwiftyAcknowledgements tvOS Tests.xctest */,
@@ -289,55 +195,8 @@
name = Products;
sourceTree = "";
};
- 52FC37791B9F6A0A005EFE87 /* SwiftyAcknowledgements */ = {
- isa = PBXGroup;
- children = (
- 52FC37831B9F6A94005EFE87 /* Acknowledgement.swift */,
- 52FC37841B9F6A94005EFE87 /* AcknowledgementsTableViewController.swift */,
- 52FC37851B9F6A94005EFE87 /* AcknowledgementViewController.swift */,
- 527046711BE0EE86004CD4FC /* UIFontDescriptorExtensions.swift */,
- 52FC377A1B9F6A0A005EFE87 /* SwiftyAcknowledgements.h */,
- 5270469E1BE206D5004CD4FC /* Supporting Files */,
- );
- path = SwiftyAcknowledgements;
- sourceTree = "";
- };
- 52FC378E1B9F6BEF005EFE87 /* iOS Example */ = {
- isa = PBXGroup;
- children = (
- 52FC378F1B9F6BEF005EFE87 /* AppDelegate.swift */,
- 52FC37911B9F6BEF005EFE87 /* ViewController.swift */,
- 52FC37931B9F6BEF005EFE87 /* Main.storyboard */,
- 52FC37961B9F6BEF005EFE87 /* Assets.xcassets */,
- 52FC37981B9F6BEF005EFE87 /* LaunchScreen.storyboard */,
- 5270469F1BE20701004CD4FC /* Resources */,
- 527046A01BE20705004CD4FC /* Supporting Files */,
- );
- name = "iOS Example";
- path = "Examples/iOS Example";
- sourceTree = "";
- };
/* End PBXGroup section */
-/* Begin PBXHeadersBuildPhase section */
- 52AAE6201BDF87B9007EB44A /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 52AAE62E1BDF87F5007EB44A /* SwiftyAcknowledgements.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 52FC37741B9F6A0A005EFE87 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 52FC377B1B9F6A0A005EFE87 /* SwiftyAcknowledgements.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXHeadersBuildPhase section */
-
/* Begin PBXNativeTarget section */
5270467A1BE203CB004CD4FC /* SwiftyAcknowledgements iOS Tests */ = {
isa = PBXNativeTarget;
@@ -347,11 +206,11 @@
527046971BE20587004CD4FC /* Generate Acknowledgements */,
527046781BE203CB004CD4FC /* Frameworks */,
527046791BE203CB004CD4FC /* Resources */,
+ 33D1BC0F25C696C700B3D1D4 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
- 527046821BE203CB004CD4FC /* PBXTargetDependency */,
);
name = "SwiftyAcknowledgements iOS Tests";
productName = "SwiftyAcknowledgementsTests iOS";
@@ -370,31 +229,12 @@
buildRules = (
);
dependencies = (
- 527046911BE204A1004CD4FC /* PBXTargetDependency */,
);
name = "SwiftyAcknowledgements tvOS Tests";
productName = "SwiftyAcknowledgements tvOS Tests";
productReference = 5270468A1BE204A1004CD4FC /* SwiftyAcknowledgements tvOS Tests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
- 52AAE6221BDF87B9007EB44A /* SwiftyAcknowledgements tvOS */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 52AAE6281BDF87B9007EB44A /* Build configuration list for PBXNativeTarget "SwiftyAcknowledgements tvOS" */;
- buildPhases = (
- 52AAE61E1BDF87B9007EB44A /* Sources */,
- 52AAE61F1BDF87B9007EB44A /* Frameworks */,
- 52AAE6201BDF87B9007EB44A /* Headers */,
- 52AAE6211BDF87B9007EB44A /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = "SwiftyAcknowledgements tvOS";
- productName = "SwiftyAcknowledgements tvOS";
- productReference = 52AAE6231BDF87B9007EB44A /* SwiftyAcknowledgements.framework */;
- productType = "com.apple.product-type.framework";
- };
52AAE6331BDF9A51007EB44A /* tvOS Example */ = {
isa = PBXNativeTarget;
buildConfigurationList = 52AAE6401BDF9A51007EB44A /* Build configuration list for PBXNativeTarget "tvOS Example" */;
@@ -408,31 +248,12 @@
buildRules = (
);
dependencies = (
- 52AAE6461BDF9AB0007EB44A /* PBXTargetDependency */,
);
name = "tvOS Example";
productName = "tvOS Example";
productReference = 52AAE6341BDF9A51007EB44A /* tvOS Example.app */;
productType = "com.apple.product-type.application";
};
- 52FC37761B9F6A0A005EFE87 /* SwiftyAcknowledgements iOS */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 52FC377F1B9F6A0A005EFE87 /* Build configuration list for PBXNativeTarget "SwiftyAcknowledgements iOS" */;
- buildPhases = (
- 52FC37721B9F6A0A005EFE87 /* Sources */,
- 52FC37731B9F6A0A005EFE87 /* Frameworks */,
- 52FC37741B9F6A0A005EFE87 /* Headers */,
- 52FC37751B9F6A0A005EFE87 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = "SwiftyAcknowledgements iOS";
- productName = SwiftyAcknowledgements;
- productReference = 52FC37771B9F6A0A005EFE87 /* SwiftyAcknowledgements.framework */;
- productType = "com.apple.product-type.framework";
- };
52FC378C1B9F6BEF005EFE87 /* iOS Example */ = {
isa = PBXNativeTarget;
buildConfigurationList = 52FC379C1B9F6BEF005EFE87 /* Build configuration list for PBXNativeTarget "iOS Example" */;
@@ -446,7 +267,6 @@
buildRules = (
);
dependencies = (
- 5275A9AC1B9F6FA9007AD576 /* PBXTargetDependency */,
);
name = "iOS Example";
productName = "iOS Example";
@@ -471,18 +291,10 @@
CreatedOnToolsVersion = 7.1;
LastSwiftMigration = 0820;
};
- 52AAE6221BDF87B9007EB44A = {
- CreatedOnToolsVersion = 7.1;
- LastSwiftMigration = 0820;
- };
52AAE6331BDF9A51007EB44A = {
CreatedOnToolsVersion = 7.1;
LastSwiftMigration = 0820;
};
- 52FC37761B9F6A0A005EFE87 = {
- CreatedOnToolsVersion = 7.0;
- LastSwiftMigration = 0820;
- };
52FC378C1B9F6BEF005EFE87 = {
CreatedOnToolsVersion = 7.0;
LastSwiftMigration = 0820;
@@ -498,14 +310,15 @@
Base,
);
mainGroup = 52FC376D1B9F6A0A005EFE87;
+ packageReferences = (
+ 33189B3E2C91685600E2E4F4 /* XCLocalSwiftPackageReference "../../SwiftyAcknowledgements" */,
+ );
productRefGroup = 52FC37781B9F6A0A005EFE87 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
- 52FC37761B9F6A0A005EFE87 /* SwiftyAcknowledgements iOS */,
5270467A1BE203CB004CD4FC /* SwiftyAcknowledgements iOS Tests */,
52FC378C1B9F6BEF005EFE87 /* iOS Example */,
- 52AAE6221BDF87B9007EB44A /* SwiftyAcknowledgements tvOS */,
527046891BE204A1004CD4FC /* SwiftyAcknowledgements tvOS Tests */,
52AAE6331BDF9A51007EB44A /* tvOS Example */,
);
@@ -517,19 +330,10 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 527046991BE2064B004CD4FC /* Acknowledgements.plist in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
527046881BE204A1004CD4FC /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 5270469A1BE2064B004CD4FC /* Acknowledgements.plist in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 52AAE6211BDF87B9007EB44A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -546,13 +350,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
- 52FC37751B9F6A0A005EFE87 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
52FC378B1B9F6BEF005EFE87 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -579,7 +376,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "${SRCROOT}/Scripts/GenerateLicenseFile.swift ${SRCROOT}/Libraries/ ${PROJECT_DIR}/Tests/Resources/Acknowledgements.plist";
+ shellScript = "#${SRCROOT}/Scripts/GenerateLicenseFile.swift ${SRCROOT}/Libraries/ ${PROJECT_DIR}/SwiftyAcknowledgementsTests/TestResources/Acknowledgements.plist\n";
};
527046971BE20587004CD4FC /* Generate Acknowledgements */ = {
isa = PBXShellScriptBuildPhase;
@@ -593,10 +390,11 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "${SRCROOT}/Scripts/GenerateLicenseFile.swift ${SRCROOT}/Libraries/ ${PROJECT_DIR}/Tests/Resources/Acknowledgements.plist";
+ shellScript = "#${SRCROOT}/Scripts/GenerateLicenseFile.swift ${SRCROOT}/Libraries/ ${PROJECT_DIR}/SwiftyAcknowledgementsTests/TestResources/Acknowledgements.plist\n";
};
5275A9A81B9F6D18007AD576 /* Generate Acknowledgements */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -604,13 +402,15 @@
);
name = "Generate Acknowledgements";
outputPaths = (
+ "\"${PROJECT_DIR}/${ACK_PLIST_PATH}\"",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "${SRCROOT}/Scripts/GenerateLicenseFile.swift ${SRCROOT}/Libraries/ ${PROJECT_DIR}/Examples/iOS\\ Example/Resources/Acknowledgements.plist";
+ shellScript = "#!/usr/bin/env bash\n\nACK_PLIST_PATH=\"iOS Example/Resources/Acknowledgements.plist\"\nROOT_DEPENDENCIES_DIRECTORY=\"Examples/Libraries\" # if you're exclusively using SPM, this should work. You may add other resources like so:\n# ROOT_SECONDARY_DEPENDENCIES_DIRECTORY=\"another/path\"\n\n#pushd \"${BUILD_ROOT}/../../SourcePackages/checkouts/SwiftyAcknowledgements/\"\npushd \"${PROJECT_DIR}/../\"\n./GenerateLicenseFile \"${ROOT_DEPENDENCIES_DIRECTORY}\" -o \"${PROJECT_DIR}/${ACK_PLIST_PATH}\"\n# ./GenerateLicenseFile \"${ROOT_DEPENDENCIES_DIRECTORY}\" \"${ROOT_SECONDARY_DEPENDENCIES_DIRECTORY}\" -o \"${PROJECT_DIR}/${ACK_PLIST_PATH}\" # use this if you have multiple dependency directories\npopd\n";
};
52AAE6481BDFAAE1007EB44A /* Generate Acknowledgements */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -621,7 +421,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "${SRCROOT}/Scripts/GenerateLicenseFile.swift ${SRCROOT}/Libraries/ ${PROJECT_DIR}/Examples/tvOS\\ Example/Resources/Acknowledgements.plist";
+ shellScript = "#!/usr/bin/env bash\n\nACK_PLIST_PATH=\"tvOS Example/Resources/Acknowledgements.plist\"\nROOT_DEPENDENCIES_DIRECTORY=\"Examples/Libraries\" # if you're exclusively using SPM, this should work. You may add other resources like so:\n# ROOT_SECONDARY_DEPENDENCIES_DIRECTORY=\"another/path\"\n\n# pushd \"${BUILD_ROOT}/../../SourcePackages/checkouts/SwiftyAcknowledgements/\"\npushd \"${PROJECT_DIR}/../\"\n./GenerateLicenseFile \"${ROOT_DEPENDENCIES_DIRECTORY}\" -o \"${PROJECT_DIR}/${ACK_PLIST_PATH}\"\n# ./GenerateLicenseFile \"${ROOT_DEPENDENCIES_DIRECTORY}\" \"${ROOT_SECONDARY_DEPENDENCIES_DIRECTORY}\" -o \"${PROJECT_DIR}/${ACK_PLIST_PATH}\" # use this if you have multiple dependency directories\npopd\n";
};
/* End PBXShellScriptBuildPhase section */
@@ -630,9 +430,6 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 524F34CE1BE248EE00784625 /* AcknowledgementsTableViewControllerTests.swift in Sources */,
- 5270467E1BE203CB004CD4FC /* AcknowledgementTests.swift in Sources */,
- 524F34D11BE2491800784625 /* BaseTestCase.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -640,20 +437,6 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 524F34CF1BE248EE00784625 /* AcknowledgementsTableViewControllerTests.swift in Sources */,
- 527046951BE204C4004CD4FC /* AcknowledgementTests.swift in Sources */,
- 524F34D21BE2491800784625 /* BaseTestCase.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 52AAE61E1BDF87B9007EB44A /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 52AAE62C1BDF87F5007EB44A /* AcknowledgementsTableViewController.swift in Sources */,
- 52AAE62D1BDF87F5007EB44A /* AcknowledgementViewController.swift in Sources */,
- 527046731BE0EE86004CD4FC /* UIFontDescriptorExtensions.swift in Sources */,
- 52AAE62B1BDF87F5007EB44A /* Acknowledgement.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -666,17 +449,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
- 52FC37721B9F6A0A005EFE87 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 52FC37871B9F6A94005EFE87 /* AcknowledgementsTableViewController.swift in Sources */,
- 52FC37881B9F6A94005EFE87 /* AcknowledgementViewController.swift in Sources */,
- 527046721BE0EE86004CD4FC /* UIFontDescriptorExtensions.swift in Sources */,
- 52FC37861B9F6A94005EFE87 /* Acknowledgement.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
52FC37891B9F6BEF005EFE87 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -688,29 +460,6 @@
};
/* End PBXSourcesBuildPhase section */
-/* Begin PBXTargetDependency section */
- 527046821BE203CB004CD4FC /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 52FC37761B9F6A0A005EFE87 /* SwiftyAcknowledgements iOS */;
- targetProxy = 527046811BE203CB004CD4FC /* PBXContainerItemProxy */;
- };
- 527046911BE204A1004CD4FC /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 52AAE6221BDF87B9007EB44A /* SwiftyAcknowledgements tvOS */;
- targetProxy = 527046901BE204A1004CD4FC /* PBXContainerItemProxy */;
- };
- 5275A9AC1B9F6FA9007AD576 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 52FC37761B9F6A0A005EFE87 /* SwiftyAcknowledgements iOS */;
- targetProxy = 5275A9AB1B9F6FA9007AD576 /* PBXContainerItemProxy */;
- };
- 52AAE6461BDF9AB0007EB44A /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 52AAE6221BDF87B9007EB44A /* SwiftyAcknowledgements tvOS */;
- targetProxy = 52AAE6451BDF9AB0007EB44A /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
/* Begin PBXVariantGroup section */
52AAE63A1BDF9A51007EB44A /* Main.storyboard */ = {
isa = PBXVariantGroup;
@@ -742,9 +491,14 @@
527046841BE203CB004CD4FC /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- INFOPLIST_FILE = "Tests/Supporting Files/Info.plist";
+ INFOPLIST_FILE = "Supporting Files/TestsInfo.plist";
IPHONEOS_DEPLOYMENT_TARGET = 9.1;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_SWIFT_FLAGS = "-DXCODE";
PRODUCT_BUNDLE_IDENTIFIER = "de.mathiasnagler.SwiftyAcknowledgementsTests-iOS";
PRODUCT_NAME = "$(TARGET_NAME)";
};
@@ -753,9 +507,14 @@
527046851BE203CB004CD4FC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- INFOPLIST_FILE = "Tests/Supporting Files/Info.plist";
+ INFOPLIST_FILE = "Supporting Files/TestsInfo.plist";
IPHONEOS_DEPLOYMENT_TARGET = 9.1;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_SWIFT_FLAGS = "-DXCODE";
PRODUCT_BUNDLE_IDENTIFIER = "de.mathiasnagler.SwiftyAcknowledgementsTests-iOS";
PRODUCT_NAME = "$(TARGET_NAME)";
};
@@ -764,8 +523,13 @@
527046931BE204A1004CD4FC /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- INFOPLIST_FILE = "Tests/Supporting Files/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ INFOPLIST_FILE = "Supporting Files/TestsInfo.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_SWIFT_FLAGS = "-DXCODE";
PRODUCT_BUNDLE_IDENTIFIER = "de.mathiasnagler.SwiftyAcknowledgements-tvOS-Tests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
@@ -776,8 +540,13 @@
527046941BE204A1004CD4FC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- INFOPLIST_FILE = "Tests/Supporting Files/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ INFOPLIST_FILE = "Supporting Files/TestsInfo.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_SWIFT_FLAGS = "-DXCODE";
PRODUCT_BUNDLE_IDENTIFIER = "de.mathiasnagler.SwiftyAcknowledgements-tvOS-Tests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
@@ -785,75 +554,39 @@
};
name = Release;
};
- 52AAE6291BDF87B9007EB44A /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- INFOPLIST_FILE = "SwiftyAcknowledgements/Supporting Files/Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = de.mathiasnagler.SwiftyAcknowledgements;
- PRODUCT_NAME = SwiftyAcknowledgements;
- SDKROOT = appletvos;
- SKIP_INSTALL = YES;
- TARGETED_DEVICE_FAMILY = 3;
- TVOS_DEPLOYMENT_TARGET = 9.0;
- };
- name = Debug;
- };
- 52AAE62A1BDF87B9007EB44A /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- INFOPLIST_FILE = "SwiftyAcknowledgements/Supporting Files/Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = de.mathiasnagler.SwiftyAcknowledgements;
- PRODUCT_NAME = SwiftyAcknowledgements;
- SDKROOT = appletvos;
- SKIP_INSTALL = YES;
- TARGETED_DEVICE_FAMILY = 3;
- TVOS_DEPLOYMENT_TARGET = 9.0;
- };
- name = Release;
- };
52AAE6411BDF9A51007EB44A /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
- INFOPLIST_FILE = "Examples/tvOS Example/Supporting Files/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ INFOPLIST_FILE = "tvOS Example/Supporting Files/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
PRODUCT_BUNDLE_IDENTIFIER = "de.mathiasnagler.tvOS-Example";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TARGETED_DEVICE_FAMILY = 3;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 12.0;
};
name = Debug;
};
52AAE6421BDF9A51007EB44A /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
- INFOPLIST_FILE = "Examples/tvOS Example/Supporting Files/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ INFOPLIST_FILE = "tvOS Example/Supporting Files/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
PRODUCT_BUNDLE_IDENTIFIER = "de.mathiasnagler.tvOS-Example";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TARGETED_DEVICE_FAMILY = 3;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 12.0;
};
name = Release;
};
@@ -962,7 +695,8 @@
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
@@ -971,51 +705,16 @@
};
name = Release;
};
- 52FC37801B9F6A0A005EFE87 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_ENABLE_MODULES = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- INFOPLIST_FILE = "SwiftyAcknowledgements/Supporting Files/Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = de.mathiasnagler.SwiftyAcknowledgements;
- PRODUCT_NAME = SwiftyAcknowledgements;
- SKIP_INSTALL = YES;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- };
- name = Debug;
- };
- 52FC37811B9F6A0A005EFE87 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_ENABLE_MODULES = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- INFOPLIST_FILE = "SwiftyAcknowledgements/Supporting Files/Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- PRODUCT_BUNDLE_IDENTIFIER = de.mathiasnagler.SwiftyAcknowledgements;
- PRODUCT_NAME = SwiftyAcknowledgements;
- SKIP_INSTALL = YES;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
- };
- name = Release;
- };
52FC379D1B9F6BEF005EFE87 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- INFOPLIST_FILE = "Examples/iOS Example/Supporting Files/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ INFOPLIST_FILE = "iOS Example/Supporting Files/Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
PRODUCT_BUNDLE_IDENTIFIER = "de.mathiasnagler.iOS-Example";
PRODUCT_NAME = "$(TARGET_NAME)";
};
@@ -1024,13 +723,17 @@
52FC379E1B9F6BEF005EFE87 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- INFOPLIST_FILE = "Examples/iOS Example/Supporting Files/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ INFOPLIST_FILE = "iOS Example/Supporting Files/Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
PRODUCT_BUNDLE_IDENTIFIER = "de.mathiasnagler.iOS-Example";
PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
};
name = Release;
};
@@ -1055,15 +758,6 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 52AAE6281BDF87B9007EB44A /* Build configuration list for PBXNativeTarget "SwiftyAcknowledgements tvOS" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 52AAE6291BDF87B9007EB44A /* Debug */,
- 52AAE62A1BDF87B9007EB44A /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
52AAE6401BDF9A51007EB44A /* Build configuration list for PBXNativeTarget "tvOS Example" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -1082,15 +776,6 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 52FC377F1B9F6A0A005EFE87 /* Build configuration list for PBXNativeTarget "SwiftyAcknowledgements iOS" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 52FC37801B9F6A0A005EFE87 /* Debug */,
- 52FC37811B9F6A0A005EFE87 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
52FC379C1B9F6BEF005EFE87 /* Build configuration list for PBXNativeTarget "iOS Example" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -1101,6 +786,25 @@
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
+
+/* Begin XCLocalSwiftPackageReference section */
+ 33189B3E2C91685600E2E4F4 /* XCLocalSwiftPackageReference "../../SwiftyAcknowledgements" */ = {
+ isa = XCLocalSwiftPackageReference;
+ relativePath = ../../SwiftyAcknowledgements;
+ };
+/* End XCLocalSwiftPackageReference section */
+
+/* Begin XCSwiftPackageProductDependency section */
+ 33189B3F2C91685600E2E4F4 /* SwiftyAcknowledgements */ = {
+ isa = XCSwiftPackageProductDependency;
+ productName = SwiftyAcknowledgements;
+ };
+ 33189B422C916B0800E2E4F4 /* SwiftyAcknowledgements */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = 33189B3E2C91685600E2E4F4 /* XCLocalSwiftPackageReference "../../SwiftyAcknowledgements" */;
+ productName = SwiftyAcknowledgements;
+ };
+/* End XCSwiftPackageProductDependency section */
};
rootObject = 52FC376E1B9F6A0A005EFE87 /* Project object */;
}
diff --git a/Examples/SwiftyAcknowledgements.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Examples/SwiftyAcknowledgements.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/Examples/SwiftyAcknowledgements.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/SwiftyAcknowledgements.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Examples/SwiftyAcknowledgements.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
similarity index 100%
rename from SwiftyAcknowledgements.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
rename to Examples/SwiftyAcknowledgements.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
diff --git a/Examples/SwiftyAcknowledgements.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Examples/SwiftyAcknowledgements.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
new file mode 100644
index 0000000..66cc87c
--- /dev/null
+++ b/Examples/SwiftyAcknowledgements.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
@@ -0,0 +1,15 @@
+{
+ "originHash" : "907d69151ab172208851b8c80175e11412585ab00f806e95afaf0320e59d7132",
+ "pins" : [
+ {
+ "identity" : "swift-argument-parser",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-argument-parser",
+ "state" : {
+ "revision" : "41982a3656a71c768319979febd796c6fd111d5c",
+ "version" : "1.5.0"
+ }
+ }
+ ],
+ "version" : 3
+}
diff --git a/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements iOS Tests.xcscheme b/Examples/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements iOS Tests.xcscheme
similarity index 100%
rename from SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements iOS Tests.xcscheme
rename to Examples/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements iOS Tests.xcscheme
diff --git a/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements iOS.xcscheme b/Examples/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements iOS.xcscheme
similarity index 100%
rename from SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements iOS.xcscheme
rename to Examples/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements iOS.xcscheme
diff --git a/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements tvOS Tests.xcscheme b/Examples/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements tvOS Tests.xcscheme
similarity index 100%
rename from SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements tvOS Tests.xcscheme
rename to Examples/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements tvOS Tests.xcscheme
diff --git a/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements tvOS.xcscheme b/Examples/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements tvOS.xcscheme
similarity index 100%
rename from SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements tvOS.xcscheme
rename to Examples/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/SwiftyAcknowledgements tvOS.xcscheme
diff --git a/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/iOS Example.xcscheme b/Examples/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/iOS Example.xcscheme
similarity index 100%
rename from SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/iOS Example.xcscheme
rename to Examples/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/iOS Example.xcscheme
diff --git a/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/tvOS Example.xcscheme b/Examples/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/tvOS Example.xcscheme
similarity index 100%
rename from SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/tvOS Example.xcscheme
rename to Examples/SwiftyAcknowledgements.xcodeproj/xcshareddata/xcschemes/tvOS Example.xcscheme
diff --git a/Examples/iOS Example/Base.lproj/Main.storyboard b/Examples/iOS Example/Base.lproj/Main.storyboard
index c74df72..fc0d3ff 100644
--- a/Examples/iOS Example/Base.lproj/Main.storyboard
+++ b/Examples/iOS Example/Base.lproj/Main.storyboard
@@ -1,7 +1,10 @@
-
-
+
+
+
-
+
+
+
@@ -13,31 +16,28 @@
-
+
-
+
-
-
-
+
@@ -51,8 +51,7 @@
-
-
+
@@ -69,10 +68,9 @@
-
+
-
-
+
@@ -95,9 +93,8 @@
-
+
-
diff --git a/Examples/iOS Example/ViewController.swift b/Examples/iOS Example/ViewController.swift
index 70cdd7d..a19bb34 100644
--- a/Examples/iOS Example/ViewController.swift
+++ b/Examples/iOS Example/ViewController.swift
@@ -14,7 +14,7 @@ class ViewController: UIViewController {
@IBAction func showAcknowledgements() {
let vc = AcknowledgementsTableViewController()
vc.headerText = "SwiftyAcknowledgements makes use of the following third party libraries:"
- vc.footerText = "Third party libraries integrated using Carthage:\nhttp://github.com/carthage"
+ vc.footerText = "Third party libraries integrated using Swift Package Manager"
vc.acknowledgements.append(Acknowledgement(title: "Custom Acknowledgement", text: "This is a custom acknowledgement added via code."))
diff --git a/Examples/tvOS Example/AppDelegate.swift b/Examples/tvOS Example/AppDelegate.swift
index e1ace3c..dd96698 100644
--- a/Examples/tvOS Example/AppDelegate.swift
+++ b/Examples/tvOS Example/AppDelegate.swift
@@ -14,7 +14,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
- func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
+ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return true
}
diff --git a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
index 0564959..795cce1 100644
--- a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
+++ b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -3,10 +3,14 @@
{
"idiom" : "tv",
"scale" : "1x"
+ },
+ {
+ "idiom" : "tv",
+ "scale" : "2x"
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-}
\ No newline at end of file
+}
diff --git a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
index 0564959..795cce1 100644
--- a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
+++ b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -3,10 +3,14 @@
{
"idiom" : "tv",
"scale" : "1x"
+ },
+ {
+ "idiom" : "tv",
+ "scale" : "2x"
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-}
\ No newline at end of file
+}
diff --git a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
index 0564959..795cce1 100644
--- a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
+++ b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -3,10 +3,14 @@
{
"idiom" : "tv",
"scale" : "1x"
+ },
+ {
+ "idiom" : "tv",
+ "scale" : "2x"
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-}
\ No newline at end of file
+}
diff --git a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
index 0564959..795cce1 100644
--- a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
+++ b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json
@@ -3,10 +3,14 @@
{
"idiom" : "tv",
"scale" : "1x"
+ },
+ {
+ "idiom" : "tv",
+ "scale" : "2x"
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-}
\ No newline at end of file
+}
diff --git a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
index 0564959..795cce1 100644
--- a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
+++ b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json
@@ -3,10 +3,14 @@
{
"idiom" : "tv",
"scale" : "1x"
+ },
+ {
+ "idiom" : "tv",
+ "scale" : "2x"
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-}
\ No newline at end of file
+}
diff --git a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
index 0564959..795cce1 100644
--- a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
+++ b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json
@@ -3,10 +3,14 @@
{
"idiom" : "tv",
"scale" : "1x"
+ },
+ {
+ "idiom" : "tv",
+ "scale" : "2x"
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-}
\ No newline at end of file
+}
diff --git a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json
index 6a3dcfa..925aaed 100644
--- a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json
+++ b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json
@@ -1,26 +1,32 @@
{
"assets" : [
{
- "size" : "1280x768",
- "idiom" : "tv",
"filename" : "App Icon - Large.imagestack",
- "role" : "primary-app-icon"
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "1280x768"
},
{
- "size" : "400x240",
- "idiom" : "tv",
"filename" : "App Icon - Small.imagestack",
- "role" : "primary-app-icon"
+ "idiom" : "tv",
+ "role" : "primary-app-icon",
+ "size" : "400x240"
},
{
- "size" : "1920x720",
+ "filename" : "Top Shelf Image Wide.imageset",
"idiom" : "tv",
+ "role" : "top-shelf-image-wide",
+ "size" : "2320x720"
+ },
+ {
"filename" : "Top Shelf Image.imageset",
- "role" : "top-shelf-image"
+ "idiom" : "tv",
+ "role" : "top-shelf-image",
+ "size" : "1920x720"
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
}
diff --git a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json
new file mode 100644
index 0000000..795cce1
--- /dev/null
+++ b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json
@@ -0,0 +1,16 @@
+{
+ "images" : [
+ {
+ "idiom" : "tv",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "tv",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json
index 0564959..795cce1 100644
--- a/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json
+++ b/Examples/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json
@@ -3,10 +3,14 @@
{
"idiom" : "tv",
"scale" : "1x"
+ },
+ {
+ "idiom" : "tv",
+ "scale" : "2x"
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-}
\ No newline at end of file
+}
diff --git a/Examples/tvOS Example/Assets.xcassets/LaunchImage.launchimage/Contents.json b/Examples/tvOS Example/Assets.xcassets/LaunchImage.launchimage/Contents.json
index 29d94c7..18498e0 100644
--- a/Examples/tvOS Example/Assets.xcassets/LaunchImage.launchimage/Contents.json
+++ b/Examples/tvOS Example/Assets.xcassets/LaunchImage.launchimage/Contents.json
@@ -1,15 +1,22 @@
{
"images" : [
{
- "orientation" : "landscape",
+ "extent" : "full-screen",
"idiom" : "tv",
+ "minimum-system-version" : "11.0",
+ "orientation" : "landscape",
+ "scale" : "2x"
+ },
+ {
"extent" : "full-screen",
+ "idiom" : "tv",
"minimum-system-version" : "9.0",
+ "orientation" : "landscape",
"scale" : "1x"
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-}
\ No newline at end of file
+}
diff --git a/Examples/tvOS Example/Base.lproj/Main.storyboard b/Examples/tvOS Example/Base.lproj/Main.storyboard
index ebb8839..15ff587 100644
--- a/Examples/tvOS Example/Base.lproj/Main.storyboard
+++ b/Examples/tvOS Example/Base.lproj/Main.storyboard
@@ -1,7 +1,10 @@
-
-
+
+
+
-
+
+
+
@@ -17,25 +20,25 @@
-
+
-
-
-
+
+
-
-
-
+
+
+
+
+
-
@@ -47,8 +50,7 @@
-
-
+
@@ -60,15 +62,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
diff --git a/Examples/tvOS Example/ViewController.swift b/Examples/tvOS Example/ViewController.swift
index d2f910b..dc95dd9 100644
--- a/Examples/tvOS Example/ViewController.swift
+++ b/Examples/tvOS Example/ViewController.swift
@@ -14,8 +14,8 @@ class ViewController: UIViewController {
@IBAction func showAcknowledgements() {
let vc = AcknowledgementsTableViewController()
vc.headerText = "SwiftyAcknowledgements makes use of the following third party libraries:"
- vc.footerText = "Third party libraries integrated using Carthage:\nhttp://github.com/carthage"
-
+ vc.footerText = "Third party libraries integrated using Swift Package Manager"
+
vc.acknowledgements.append(Acknowledgement(title: "Custom Acknowledgement", text: "This is a custom acknowledgement added via code."))
navigationController?.pushViewController(vc, animated: true)
diff --git a/GenerateLicenseFile b/GenerateLicenseFile
new file mode 100755
index 0000000..2e2a553
Binary files /dev/null and b/GenerateLicenseFile differ
diff --git a/Package.resolved b/Package.resolved
new file mode 100644
index 0000000..9a446d3
--- /dev/null
+++ b/Package.resolved
@@ -0,0 +1,14 @@
+{
+ "pins" : [
+ {
+ "identity" : "swift-argument-parser",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/apple/swift-argument-parser",
+ "state" : {
+ "revision" : "41982a3656a71c768319979febd796c6fd111d5c",
+ "version" : "1.5.0"
+ }
+ }
+ ],
+ "version" : 2
+}
diff --git a/Package.swift b/Package.swift
new file mode 100644
index 0000000..51c895d
--- /dev/null
+++ b/Package.swift
@@ -0,0 +1,66 @@
+// swift-tools-version:5.9
+// The swift-tools-version declares the minimum version of Swift required to build this package.
+
+import PackageDescription
+
+let package = Package(
+ name: "SwiftyAcknowledgements",
+ platforms: [
+ .iOS(.v9),
+ .tvOS(.v9),
+ .macOS(.v12),
+ ],
+ products: [
+ // Products define the executables and libraries a package produces, and make them visible to other packages.
+ .library(
+ name: "SwiftyAcknowledgements",
+ targets: ["SwiftyAcknowledgements"]),
+ .library(
+ name: "LicenseFileGenerator",
+ targets: ["LicenseFileGenerator"]),
+ .executable(
+ name: "GenerateLicenseFileExe",
+ targets: ["GenerateLicenseFileExe"]),
+ .plugin(
+ name: "GenerateLicenseFile",
+ targets: ["GenerateLicenseFile"])
+ ],
+ dependencies: [
+ // Dependencies declare other packages that this package depends on.
+ // .package(url: /* package url */, from: "1.0.0"),
+ .package(url: "https://github.com/apple/swift-argument-parser", .upToNextMajor(from: "1.0.0")),
+ ],
+ targets: [
+ // Targets are the basic building blocks of a package. A target can define a module or a test suite.
+ // Targets can depend on other targets in this package, and on products in packages this package depends on.
+ .target(
+ name: "SwiftyAcknowledgements",
+ dependencies: []),
+ .target(
+ name: "LicenseFileGenerator"),
+ .executableTarget(
+ name: "GenerateLicenseFileExe",
+ dependencies: [
+ "LicenseFileGenerator",
+ .product(name: "ArgumentParser", package: "swift-argument-parser"),
+ ]),
+ .plugin(
+ name: "GenerateLicenseFile",
+ capability: .command(
+ intent: .custom(
+ verb: "generate-license-file",
+ description: "Generates the licenses plist file"),
+ permissions: [
+ .writeToPackageDirectory(reason: "Writes licenses plist file")
+ ]),
+ dependencies: [
+ "GenerateLicenseFileExe",
+ ]),
+ .testTarget(
+ name: "SwiftyAcknowledgementsTests",
+ dependencies: ["SwiftyAcknowledgements"],
+ resources: [
+ .copy("TestResources/")
+ ]),
+ ]
+)
diff --git a/Plugins/GenerateLicenseFile/plugin.swift b/Plugins/GenerateLicenseFile/plugin.swift
new file mode 100644
index 0000000..0337296
--- /dev/null
+++ b/Plugins/GenerateLicenseFile/plugin.swift
@@ -0,0 +1,44 @@
+import Foundation
+import PackagePlugin
+
+
+/**
+ Right now this only works on SPM projects and not in Xcode projects. No idea if that will be fixed later as it plain just doesn't run in Xcode projects.
+ */
+@main
+struct GenerateLicenseFile: CommandPlugin {
+ func performCommand(context: PluginContext, arguments: [String]) async throws {
+ let tool = try context.tool(named: "GenerateLicenseFileExe")
+ let toolUrl = URL(fileURLWithPath: tool.path.string)
+
+ var updatedArguments: [String] = []
+ var skip = false
+ for argument in arguments {
+ guard skip == false else {
+ skip = false
+ continue
+ }
+ if argument == "--target" {
+ skip = true
+ } else {
+ updatedArguments.append(argument)
+ }
+ }
+
+ var directories = ["\(context.package.directory)"]
+ if updatedArguments.contains("-b") {
+ directories = []
+ }
+
+ updatedArguments.removeAll(where: { $0 == "-b" })
+
+ directories += updatedArguments
+
+ let process = Process()
+ process.executableURL = toolUrl
+ process.arguments = directories + ["-o", "Acknowledgements.plist"]
+
+ try process.run()
+ process.waitUntilExit()
+ }
+}
diff --git a/README.md b/README.md
index ccb8f02..4fcaf34 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,15 @@
# SwiftyAcknowledgements
-[](https://travis-ci.org/mathiasnagler/SwiftyAcknowledgements)
-[](https://github.com/Carthage/Carthage)

SwiftyAcknowledgements makes it easy to integrate acknowledgements for third party libraries into your iOS Apps.
-## Requirements
+I should Swiftly Acknowledge that I am not the original author of this package. I've simply updated it with SPM and a couple other things. You can find the original [here](https://github.com/mathiasnagler/SwiftyAcknowledgements).
-- iOS 8.0 or higher
-- tvOS 9.0 or higher
-- Xcode 8.2 or higher
+## Requirements (might be accurate)
+
+- iOS 12.0 or higher
+- tvOS 12.0 or higher
+- Xcode 14 or higher
## Components
@@ -17,37 +17,38 @@ SwiftyAcknowledgements consists of two components.
### Script
-`GenerateLicenseFile.swift` is a Swift script that scans a directory for files named `LICENSE` or `LICENSE.txt` and generates a property list containing the content of every license along with a name. The name will be set to the name of the folder that the corresponding license file is contained in.
+`GenerateLicenseFileExe` is a Swift script that scans a directory for files containing the word `license` and generates a property list containing the content of every license along with a name. The name will be set to the name of the folder that the corresponding license file is contained in.
### Framework
-**SwiftyAcknowledgements** comes with a framework `SwiftyAcknowledgements.framework` that can be used to visualize the generated license file within an iOS App. The framework contains a **TableViewController** and a **DetailViewController** and can be integrated programatically or using a **Storyboard**.
+~~**SwiftyAcknowledgements** comes with a framework `SwiftyAcknowledgements.framework` that can be used to visualize the generated license file within an iOS App. The framework contains a **TableViewController** and a **DetailViewController** and can be integrated programatically or using a **Storyboard**.~~
+Using SPM the library is statically linked and magic.
## Installation
-### Carthage
-
-[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
-
-To integrate **SwiftyAcknowledgements** into your Xcode projekct using **Carthage**, specify it in your `Cartfile`:
-
-```
-github "mathiasnagler/SwiftyAcknowledgements"
-```
-
-Follow the instructions in the [Carthage Documentation](https://github.com/Carthage/Carthage) to install the built framework into your Xcode project.
-
-### Script
-
-To integrate the script into your Xcode project create a subfolder `Scripts` in the folder that contains your Xcode project. Then, copy `GenerateLicenseFile.swift` to that subfolder. In your target, create a new `Run Script Build Phase` like this:
-
-```
-${SRCROOT}/Scripts/GenerateLicenseFile.swift ${SRCROOT}/Libraries/ ${PROJECT_DIR}/iOS\ Example/Acknowledgements.plist
-```
-
-**Note:** The first parameter for the script is the input directory that should be scanned for license files. The second parameter is the output file that should be generated by the script.
-
-After that, build your project and add the generated license file to your Xcode project.
+### Swift Package Manger
+1. Add this url to your SPM packages:
+ ```
+ https://github.com/mredig/SwiftyAcknowledgements.git
+ ```
+
+1. Create a new run script in Xcode's build process and paste (with edits) this snippet. Update the `ACK_PLIST_PATH` and `ROOT_DEPENDENCIES_DIRECTORY` (if necessary) variables. You can add multiple paths with dependcy directories.
+ ```sh
+ #!/usr/bin/env bash
+
+ ACK_PLIST_PATH="[Your Project]/[Project Path]/Acknowledgements.plist"
+ ROOT_DEPENDENCIES_DIRECTORY="../" # if you're exclusively using SPM, this should work. You may add other resources like so:
+ # ROOT_SECONDARY_DEPENDENCIES_DIRECTORY="another/path"
+
+ pushd "${BUILD_ROOT}/../../SourcePackages/checkouts/SwiftyAcknowledgements/"
+ ./GenerateLicenseFile "${ROOT_DEPENDENCIES_DIRECTORY}" -o "${PROJECT_DIR}/${ACK_PLIST_PATH}"
+ # ./GenerateLicenseFile "${ROOT_DEPENDENCIES_DIRECTORY}" "${ROOT_SECONDARY_DEPENDENCIES_DIRECTORY}" -o "${PROJECT_DIR}/${ACK_PLIST_PATH}" # use this if you have multiple dependency directories
+ popd
+ ```
+1. Uncheck `Based on Dependency Analysis` on the run step.
+1. After that, build your project. This will create the Acknowledgements.plist file that you can then add to your project.
+1. Subsequent builds will automatically update the file with additional dependencies as you add and remove* them.
+ * \* you might need to manually remove the source dependency folder, as Xcode doesn't appear to delete the checked out code when you remove an SPM dependency.
## Usage
diff --git a/Scripts/GenerateLicenseFile.swift b/Scripts/GenerateLicenseFile.swift
deleted file mode 100755
index e032c1f..0000000
--- a/Scripts/GenerateLicenseFile.swift
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/env xcrun --sdk macosx swift
-
-import Foundation
-
-// MARK: String Extensions
-
-extension String {
- func ends(with str: String) -> Bool {
- if let range = self.range(of: str, options: .backwards) {
- return range.upperBound == self.endIndex
- }
- return false
- }
-}
-
-// MARK: Internal functions
-
-func locateLicense(inFolder folder: String) -> String? {
- let filemanager = FileManager.default
-
- guard let subpaths = try? filemanager.subpathsOfDirectory(atPath: folder) else {
- return nil
- }
-
- var filteredPaths = subpaths.filter { $0.ends(with: "LICENSE") || $0.ends(with: "LICENSE.txt") }
- filteredPaths = filteredPaths.map { folder + "/" + $0 }
- return filteredPaths.first
-}
-
-// MARK: Main
-
-// Grab command line arguments
-let arguments = CommandLine.arguments
-
-// Get the filename of the swift script for logging purposes
-let scriptFileName = arguments[0].components(separatedBy: "/").last!
-
-// Check argument count
-if arguments.count != 3 {
- print("Invalid parameters. Usage: ./\(scriptFileName) ")
- exit(1)
-}
-
-var inDict = arguments[1]
-let outFile = arguments[2]
-
-let outURL = URL(fileURLWithPath: outFile)
-
-// Add '/' to inDict if it is missing, otherwise the script will not find any subpaths
-if !inDict.ends(with: "/") {
- inDict += "/"
-}
-
-// Initialize default NSFileManager
-let filemanager = FileManager.default
-
-// Get subpaths (libraries at path)
-guard let libraries = try? filemanager.contentsOfDirectory(atPath: inDict), libraries.count > 0 else {
- print("Could not access directory at path \(inDict).")
- exit(1)
-}
-
-// Result array
-var licenses = Array>()
-
-// Load license for each library and add it to the result array
-libraries.forEach({ (library: String) in
- guard
- let licensePath = locateLicense(inFolder: inDict + library),
- let licence = try? String(contentsOfFile: licensePath, encoding: .utf8)
- else {
- return
- }
-
- licenses.append(["title" : library, "text" : licence])
-})
-
-// Generate plist from result array
-let plist = try! PropertyListSerialization.data(fromPropertyList: licenses, format: .xml, options: 0) as NSData
-
-// Write plist to disk
-do {
- try plist.write(to: outURL)
-} catch {
- print("Error saving plist to disk: \(error)")
- exit(1)
-}
diff --git a/Sources/GenerateLicenseFileExe/GenerateLicenseFileExe.swift b/Sources/GenerateLicenseFileExe/GenerateLicenseFileExe.swift
new file mode 100644
index 0000000..9a3dac6
--- /dev/null
+++ b/Sources/GenerateLicenseFileExe/GenerateLicenseFileExe.swift
@@ -0,0 +1,23 @@
+import Foundation
+import ArgumentParser
+import LicenseFileGenerator
+
+@main
+struct GenerateLicenseFileExe: ParsableCommand {
+ @Argument(
+ help: "Source Directories",
+ completion: .directory,
+ transform: URL.init(fileURLWithPath:))
+ var sourceDirectories: [URL]
+
+ @Option(
+ name: .customShort("o"),
+ help: "Destination File",
+ completion: .file(),
+ transform: URL.init(fileURLWithPath:))
+ var destinationFile: URL
+
+ func run() throws {
+ try LicenseFileGenerator().generatePlist(inputDirs: sourceDirectories, outputFile: destinationFile)
+ }
+}
diff --git a/Sources/LicenseFileGenerator/LicenseFileGenerator.swift b/Sources/LicenseFileGenerator/LicenseFileGenerator.swift
new file mode 100644
index 0000000..f05844b
--- /dev/null
+++ b/Sources/LicenseFileGenerator/LicenseFileGenerator.swift
@@ -0,0 +1,100 @@
+import Foundation
+
+public struct LicenseFileGenerator {
+ private static let fm = FileManager.default
+ private var fm: FileManager { Self.fm }
+
+ public init() {}
+
+ public func generatePlist(inputDirs: [URL], outputFile: URL) throws {
+ // Get subpaths (libraries at paths)
+ let libraryPaths = getAllLibraryPaths(from: inputDirs)
+
+ // Load license for each library and add it to a dictionary, removing potential duplicates
+ let libraryLicenses = loadAllLicenses(from: libraryPaths)
+
+ // Convert dictionary to expected data structuring, but alphabetized
+ let exportDictionary = formatDataForExport(with: libraryLicenses)
+
+ // Generate plist from result array
+ // Write plist to disk
+// do {
+ let plist = try PropertyListSerialization.data(fromPropertyList: exportDictionary, format: .xml, options: 0)
+ try plist.write(to: outputFile)
+// } catch {
+// fatalError("Error saving plist to disk: \(error)")
+// }
+ print("Saved license info to \(outputFile.path)")
+ }
+
+ // MARK: Internal functions
+ func locateLicense(inProject projectFolder: URL) -> URL? {
+ var isDir: ObjCBool = false
+ fm.fileExists(atPath: projectFolder.path, isDirectory: &isDir)
+ guard
+ isDir.boolValue == true,
+ let subpathEnumerator = fm.enumerator(at: projectFolder, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles])?.makeIterator()
+ else { return nil }
+
+ let licenseFiles = subpathEnumerator
+ .map { $0 as? URL }
+ .compactMap { $0 }
+ .filter {
+ guard $0.lastPathComponent.lowercased().contains("license") else { return false }
+ var licenseIsDir: ObjCBool = false
+ fm.fileExists(atPath: $0.path, isDirectory: &licenseIsDir)
+ return !licenseIsDir.boolValue
+ }
+
+ return licenseFiles.first
+ }
+
+ func getAllLibraryPaths(from inputDirs: [URL]) -> [URL] {
+ inputDirs.compactMap {
+ try? fm
+ .contentsOfDirectory(at: $0, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles])
+ .filter {
+ var isDir: ObjCBool = false
+ fm.fileExists(atPath: $0.path, isDirectory: &isDir)
+ return isDir.boolValue
+ }
+ }
+ .flatMap { $0 }
+ }
+
+ func loadAllLicenses(from libraryPaths: [URL]) -> [String: String] {
+ libraryPaths.reduce(into: [String: String]()) {
+ guard
+ let licensePath = locateLicense(inProject: $1),
+ let license = try? String(contentsOf: licensePath, encoding: .utf8)
+ else { return }
+
+ $0[$1.lastPathComponent] = license
+ }
+ }
+
+ func formatDataForExport(with libraryLicenses: [String: String]) -> [[String: String]] {
+ libraryLicenses
+ .keys
+ .sorted()
+ .map {
+ let value = libraryLicenses[$0, default: ""]
+ return [
+ "title": $0,
+ "text": value
+ ]
+ }
+ }
+}
+
+// MARK: Convenience Extensions
+extension IteratorProtocol {
+ func map