Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a778f03d8f |
@@ -1,6 +1,10 @@
|
|||||||
Changelog
|
Changelog
|
||||||
==========
|
==========
|
||||||
|
|
||||||
|
### 3.1.0
|
||||||
|
|
||||||
|
- Code cleanup
|
||||||
|
|
||||||
### 3.0.0
|
### 3.0.0
|
||||||
|
|
||||||
- Swift 4.2
|
- Swift 4.2
|
||||||
|
|||||||
@@ -7,22 +7,36 @@
|
|||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
76229B602180AB5000A61697 /* OpenSourceControllerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B5E2180AB5000A61697 /* OpenSourceControllerConfig.swift */; };
|
||||||
|
76229B612180AB5000A61697 /* OpenSourceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B5F2180AB5000A61697 /* OpenSourceController.swift */; };
|
||||||
|
76229B662180AB5D00A61697 /* OpenSourceTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B622180AB5C00A61697 /* OpenSourceTableViewCell.swift */; };
|
||||||
|
76229B672180AB5D00A61697 /* LoadingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B632180AB5D00A61697 /* LoadingViewController.swift */; };
|
||||||
|
76229B682180AB5D00A61697 /* OpenSourceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B642180AB5D00A61697 /* OpenSourceViewController.swift */; };
|
||||||
|
76229B692180AB5D00A61697 /* LicenceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B652180AB5D00A61697 /* LicenceListViewController.swift */; };
|
||||||
|
76229B832180AFAD00A61697 /* HTTPDataLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B822180AFAD00A61697 /* HTTPDataLoader.swift */; };
|
||||||
|
7627B06221807C4B0057FFBB /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 7627B06121807C4B0057FFBB /* README.md */; };
|
||||||
76EAA8651E93F2CC009A41DA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8641E93F2CC009A41DA /* AppDelegate.swift */; };
|
76EAA8651E93F2CC009A41DA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8641E93F2CC009A41DA /* AppDelegate.swift */; };
|
||||||
76EAA8671E93F2CC009A41DA /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8661E93F2CC009A41DA /* ViewController.swift */; };
|
76EAA8671E93F2CC009A41DA /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8661E93F2CC009A41DA /* ViewController.swift */; };
|
||||||
76EAA86A1E93F2CC009A41DA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 76EAA8681E93F2CC009A41DA /* Main.storyboard */; };
|
76EAA86A1E93F2CC009A41DA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 76EAA8681E93F2CC009A41DA /* Main.storyboard */; };
|
||||||
76EAA86C1E93F2CC009A41DA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 76EAA86B1E93F2CC009A41DA /* Assets.xcassets */; };
|
76EAA86C1E93F2CC009A41DA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 76EAA86B1E93F2CC009A41DA /* Assets.xcassets */; };
|
||||||
76EAA86F1E93F2CC009A41DA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 76EAA86D1E93F2CC009A41DA /* LaunchScreen.storyboard */; };
|
76EAA86F1E93F2CC009A41DA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 76EAA86D1E93F2CC009A41DA /* LaunchScreen.storyboard */; };
|
||||||
76EAA8881E93F666009A41DA /* OpenSourceTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8871E93F666009A41DA /* OpenSourceTableViewCell.swift */; };
|
76EAA88D1E93F675009A41DA /* LicenceLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA88A1E93F675009A41DA /* LicenceLoader.swift */; };
|
||||||
76EAA88D1E93F675009A41DA /* LicenceDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA88A1E93F675009A41DA /* LicenceDownloader.swift */; };
|
|
||||||
76EAA88E1E93F675009A41DA /* LicenceFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA88B1E93F675009A41DA /* LicenceFile.swift */; };
|
76EAA88E1E93F675009A41DA /* LicenceFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA88B1E93F675009A41DA /* LicenceFile.swift */; };
|
||||||
76EAA88F1E93F675009A41DA /* OpenSourceControllerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA88C1E93F675009A41DA /* OpenSourceControllerConfig.swift */; };
|
|
||||||
76EAA8911E93F67B009A41DA /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8901E93F67B009A41DA /* Array+Extensions.swift */; };
|
76EAA8911E93F67B009A41DA /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8901E93F67B009A41DA /* Array+Extensions.swift */; };
|
||||||
76EAA8941E93F681009A41DA /* OpenSourceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8921E93F681009A41DA /* OpenSourceController.swift */; };
|
76FED173217F6CEF0037BD09 /* UIViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76FED172217F6CEF0037BD09 /* UIViewController+Extensions.swift */; };
|
||||||
76EAA8951E93F681009A41DA /* OpenSourceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8931E93F681009A41DA /* OpenSourceViewController.swift */; };
|
76FED175217F6D400037BD09 /* UIView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76FED174217F6D400037BD09 /* UIView+Extensions.swift */; };
|
||||||
C33E4D96204442AC00142EE6 /* CHANGELOG.md in Resources */ = {isa = PBXBuildFile; fileRef = C33E4D95204442AC00142EE6 /* CHANGELOG.md */; };
|
C33E4D96204442AC00142EE6 /* CHANGELOG.md in Resources */ = {isa = PBXBuildFile; fileRef = C33E4D95204442AC00142EE6 /* CHANGELOG.md */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
76229B5E2180AB5000A61697 /* OpenSourceControllerConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceControllerConfig.swift; path = ../../Sources/OpenSourceControllerConfig.swift; sourceTree = "<group>"; };
|
||||||
|
76229B5F2180AB5000A61697 /* OpenSourceController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceController.swift; path = ../../Sources/OpenSourceController.swift; sourceTree = "<group>"; };
|
||||||
|
76229B622180AB5C00A61697 /* OpenSourceTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceTableViewCell.swift; path = ../../Sources/OpenSourceViewController/OpenSourceTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
|
76229B632180AB5D00A61697 /* LoadingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LoadingViewController.swift; path = ../../Sources/OpenSourceViewController/LoadingViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76229B642180AB5D00A61697 /* OpenSourceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceViewController.swift; path = ../../Sources/OpenSourceViewController/OpenSourceViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76229B652180AB5D00A61697 /* LicenceListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceListViewController.swift; path = ../../Sources/OpenSourceViewController/LicenceListViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76229B822180AFAD00A61697 /* HTTPDataLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HTTPDataLoader.swift; path = ../../Sources/Loader/HTTPDataLoader.swift; sourceTree = "<group>"; };
|
||||||
|
7627B06121807C4B0057FFBB /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = "<group>"; };
|
||||||
76EAA8611E93F2CC009A41DA /* OpenSourceControllerDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OpenSourceControllerDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
76EAA8611E93F2CC009A41DA /* OpenSourceControllerDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OpenSourceControllerDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
76EAA8641E93F2CC009A41DA /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
76EAA8641E93F2CC009A41DA /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
76EAA8661E93F2CC009A41DA /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
|
76EAA8661E93F2CC009A41DA /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
|
||||||
@@ -30,13 +44,11 @@
|
|||||||
76EAA86B1E93F2CC009A41DA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
76EAA86B1E93F2CC009A41DA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
76EAA86E1E93F2CC009A41DA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
76EAA86E1E93F2CC009A41DA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
76EAA8701E93F2CC009A41DA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
76EAA8701E93F2CC009A41DA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
76EAA8871E93F666009A41DA /* OpenSourceTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceTableViewCell.swift; path = ../../Sources/View/OpenSourceTableViewCell.swift; sourceTree = "<group>"; };
|
76EAA88A1E93F675009A41DA /* LicenceLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceLoader.swift; path = ../../Sources/Model/LicenceLoader.swift; sourceTree = "<group>"; };
|
||||||
76EAA88A1E93F675009A41DA /* LicenceDownloader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceDownloader.swift; path = ../../Sources/Model/LicenceDownloader.swift; sourceTree = "<group>"; };
|
|
||||||
76EAA88B1E93F675009A41DA /* LicenceFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceFile.swift; path = ../../Sources/Model/LicenceFile.swift; sourceTree = "<group>"; };
|
76EAA88B1E93F675009A41DA /* LicenceFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceFile.swift; path = ../../Sources/Model/LicenceFile.swift; sourceTree = "<group>"; };
|
||||||
76EAA88C1E93F675009A41DA /* OpenSourceControllerConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceControllerConfig.swift; path = ../../Sources/Model/OpenSourceControllerConfig.swift; sourceTree = "<group>"; };
|
|
||||||
76EAA8901E93F67B009A41DA /* Array+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Array+Extensions.swift"; path = "../../Sources/Extensions/Array+Extensions.swift"; sourceTree = "<group>"; };
|
76EAA8901E93F67B009A41DA /* Array+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Array+Extensions.swift"; path = "../../Sources/Extensions/Array+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
76EAA8921E93F681009A41DA /* OpenSourceController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceController.swift; path = ../../Sources/Controller/OpenSourceController.swift; sourceTree = "<group>"; };
|
76FED172217F6CEF0037BD09 /* UIViewController+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIViewController+Extensions.swift"; path = "../../Sources/Extensions/UIViewController+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
76EAA8931E93F681009A41DA /* OpenSourceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceViewController.swift; path = ../../Sources/Controller/OpenSourceViewController.swift; sourceTree = "<group>"; };
|
76FED174217F6D400037BD09 /* UIView+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "UIView+Extensions.swift"; path = "../../Sources/Extensions/UIView+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
C33E4D95204442AC00142EE6 /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; name = CHANGELOG.md; path = ../CHANGELOG.md; sourceTree = "<group>"; };
|
C33E4D95204442AC00142EE6 /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; name = CHANGELOG.md; path = ../CHANGELOG.md; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
@@ -51,10 +63,19 @@
|
|||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
76229B5D2180AA8E00A61697 /* Loader */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76229B822180AFAD00A61697 /* HTTPDataLoader.swift */,
|
||||||
|
);
|
||||||
|
name = Loader;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
76EAA8581E93F2CC009A41DA = {
|
76EAA8581E93F2CC009A41DA = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
C33E4D95204442AC00142EE6 /* CHANGELOG.md */,
|
C33E4D95204442AC00142EE6 /* CHANGELOG.md */,
|
||||||
|
7627B06121807C4B0057FFBB /* README.md */,
|
||||||
76EAA8631E93F2CC009A41DA /* OpenSourceControllerDemo */,
|
76EAA8631E93F2CC009A41DA /* OpenSourceControllerDemo */,
|
||||||
76EAA8621E93F2CC009A41DA /* Products */,
|
76EAA8621E93F2CC009A41DA /* Products */,
|
||||||
);
|
);
|
||||||
@@ -73,11 +94,11 @@
|
|||||||
children = (
|
children = (
|
||||||
76EAA8641E93F2CC009A41DA /* AppDelegate.swift */,
|
76EAA8641E93F2CC009A41DA /* AppDelegate.swift */,
|
||||||
76EAA8661E93F2CC009A41DA /* ViewController.swift */,
|
76EAA8661E93F2CC009A41DA /* ViewController.swift */,
|
||||||
76EAA8891E93F66A009A41DA /* Sources */,
|
|
||||||
76EAA8681E93F2CC009A41DA /* Main.storyboard */,
|
76EAA8681E93F2CC009A41DA /* Main.storyboard */,
|
||||||
76EAA86D1E93F2CC009A41DA /* LaunchScreen.storyboard */,
|
76EAA86D1E93F2CC009A41DA /* LaunchScreen.storyboard */,
|
||||||
76EAA86B1E93F2CC009A41DA /* Assets.xcassets */,
|
76EAA86B1E93F2CC009A41DA /* Assets.xcassets */,
|
||||||
76EAA8701E93F2CC009A41DA /* Info.plist */,
|
76EAA8701E93F2CC009A41DA /* Info.plist */,
|
||||||
|
76EAA8891E93F66A009A41DA /* Sources */,
|
||||||
);
|
);
|
||||||
path = OpenSourceControllerDemo;
|
path = OpenSourceControllerDemo;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -85,17 +106,46 @@
|
|||||||
76EAA8891E93F66A009A41DA /* Sources */ = {
|
76EAA8891E93F66A009A41DA /* Sources */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
76EAA8921E93F681009A41DA /* OpenSourceController.swift */,
|
76229B5F2180AB5000A61697 /* OpenSourceController.swift */,
|
||||||
76EAA8931E93F681009A41DA /* OpenSourceViewController.swift */,
|
76229B5E2180AB5000A61697 /* OpenSourceControllerConfig.swift */,
|
||||||
76EAA8901E93F67B009A41DA /* Array+Extensions.swift */,
|
76FED17B217F6E2E0037BD09 /* OpenSourceViewController */,
|
||||||
76EAA88A1E93F675009A41DA /* LicenceDownloader.swift */,
|
76FED17A217F6E0F0037BD09 /* Extensions */,
|
||||||
76EAA88B1E93F675009A41DA /* LicenceFile.swift */,
|
76229B5D2180AA8E00A61697 /* Loader */,
|
||||||
76EAA88C1E93F675009A41DA /* OpenSourceControllerConfig.swift */,
|
76FED17C217F6E4A0037BD09 /* Model */,
|
||||||
76EAA8871E93F666009A41DA /* OpenSourceTableViewCell.swift */,
|
|
||||||
);
|
);
|
||||||
name = Sources;
|
name = Sources;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
76FED17A217F6E0F0037BD09 /* Extensions */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76FED172217F6CEF0037BD09 /* UIViewController+Extensions.swift */,
|
||||||
|
76EAA8901E93F67B009A41DA /* Array+Extensions.swift */,
|
||||||
|
76FED174217F6D400037BD09 /* UIView+Extensions.swift */,
|
||||||
|
);
|
||||||
|
name = Extensions;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
76FED17B217F6E2E0037BD09 /* OpenSourceViewController */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76229B652180AB5D00A61697 /* LicenceListViewController.swift */,
|
||||||
|
76229B632180AB5D00A61697 /* LoadingViewController.swift */,
|
||||||
|
76229B622180AB5C00A61697 /* OpenSourceTableViewCell.swift */,
|
||||||
|
76229B642180AB5D00A61697 /* OpenSourceViewController.swift */,
|
||||||
|
);
|
||||||
|
name = OpenSourceViewController;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
76FED17C217F6E4A0037BD09 /* Model */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76EAA88A1E93F675009A41DA /* LicenceLoader.swift */,
|
||||||
|
76EAA88B1E93F675009A41DA /* LicenceFile.swift */,
|
||||||
|
);
|
||||||
|
name = Model;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
@@ -159,6 +209,7 @@
|
|||||||
files = (
|
files = (
|
||||||
76EAA86F1E93F2CC009A41DA /* LaunchScreen.storyboard in Resources */,
|
76EAA86F1E93F2CC009A41DA /* LaunchScreen.storyboard in Resources */,
|
||||||
76EAA86C1E93F2CC009A41DA /* Assets.xcassets in Resources */,
|
76EAA86C1E93F2CC009A41DA /* Assets.xcassets in Resources */,
|
||||||
|
7627B06221807C4B0057FFBB /* README.md in Resources */,
|
||||||
76EAA86A1E93F2CC009A41DA /* Main.storyboard in Resources */,
|
76EAA86A1E93F2CC009A41DA /* Main.storyboard in Resources */,
|
||||||
C33E4D96204442AC00142EE6 /* CHANGELOG.md in Resources */,
|
C33E4D96204442AC00142EE6 /* CHANGELOG.md in Resources */,
|
||||||
);
|
);
|
||||||
@@ -171,15 +222,20 @@
|
|||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
76EAA88D1E93F675009A41DA /* LicenceDownloader.swift in Sources */,
|
76229B692180AB5D00A61697 /* LicenceListViewController.swift in Sources */,
|
||||||
|
76229B612180AB5000A61697 /* OpenSourceController.swift in Sources */,
|
||||||
|
76EAA88D1E93F675009A41DA /* LicenceLoader.swift in Sources */,
|
||||||
|
76229B682180AB5D00A61697 /* OpenSourceViewController.swift in Sources */,
|
||||||
76EAA88E1E93F675009A41DA /* LicenceFile.swift in Sources */,
|
76EAA88E1E93F675009A41DA /* LicenceFile.swift in Sources */,
|
||||||
76EAA8951E93F681009A41DA /* OpenSourceViewController.swift in Sources */,
|
76229B662180AB5D00A61697 /* OpenSourceTableViewCell.swift in Sources */,
|
||||||
76EAA8881E93F666009A41DA /* OpenSourceTableViewCell.swift in Sources */,
|
76229B832180AFAD00A61697 /* HTTPDataLoader.swift in Sources */,
|
||||||
|
76FED173217F6CEF0037BD09 /* UIViewController+Extensions.swift in Sources */,
|
||||||
76EAA8911E93F67B009A41DA /* Array+Extensions.swift in Sources */,
|
76EAA8911E93F67B009A41DA /* Array+Extensions.swift in Sources */,
|
||||||
76EAA8941E93F681009A41DA /* OpenSourceController.swift in Sources */,
|
|
||||||
76EAA8671E93F2CC009A41DA /* ViewController.swift in Sources */,
|
76EAA8671E93F2CC009A41DA /* ViewController.swift in Sources */,
|
||||||
76EAA88F1E93F675009A41DA /* OpenSourceControllerConfig.swift in Sources */,
|
76FED175217F6D400037BD09 /* UIView+Extensions.swift in Sources */,
|
||||||
76EAA8651E93F2CC009A41DA /* AppDelegate.swift in Sources */,
|
76EAA8651E93F2CC009A41DA /* AppDelegate.swift in Sources */,
|
||||||
|
76229B602180AB5000A61697 /* OpenSourceControllerConfig.swift in Sources */,
|
||||||
|
76229B672180AB5D00A61697 /* LoadingViewController.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|||||||
BIN
Binary file not shown.
@@ -13,7 +13,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
|
|
||||||
var window: UIWindow?
|
var window: UIWindow?
|
||||||
|
|
||||||
|
|
||||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||||
// Override point for customization after application launch.
|
// Override point for customization after application launch.
|
||||||
return true
|
return true
|
||||||
@@ -40,7 +39,5 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
func applicationWillTerminate(_ application: UIApplication) {
|
func applicationWillTerminate(_ application: UIApplication) {
|
||||||
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
|
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="fdz-at-fDg">
|
||||||
<device id="retina4_7" orientation="portrait">
|
<device id="retina4_7" orientation="portrait">
|
||||||
<adaptation id="fullscreen"/>
|
<adaptation id="fullscreen"/>
|
||||||
</device>
|
</device>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<deployment identifier="iOS"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14283.14"/>
|
||||||
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<scenes>
|
<scenes>
|
||||||
@@ -23,7 +22,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LI4-fC-2Ry">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LI4-fC-2Ry">
|
||||||
<rect key="frame" x="23" y="318" width="328" height="30"/>
|
<rect key="frame" x="23" y="318.5" width="329" height="30"/>
|
||||||
<state key="normal" title="Show me"/>
|
<state key="normal" title="Show me"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="showOpenSource:" destination="BYZ-38-t0r" eventType="touchUpInside" id="vmT-jj-Xvr"/>
|
<action selector="showOpenSource:" destination="BYZ-38-t0r" eventType="touchUpInside" id="vmT-jj-Xvr"/>
|
||||||
@@ -41,6 +40,24 @@
|
|||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1754.4000000000001" y="138.98050974512745"/>
|
||||||
|
</scene>
|
||||||
|
<!--Navigation Controller-->
|
||||||
|
<scene sceneID="mMO-Hp-rx0">
|
||||||
|
<objects>
|
||||||
|
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="fdz-at-fDg" sceneMemberID="viewController">
|
||||||
|
<toolbarItems/>
|
||||||
|
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="gcV-6a-gYe">
|
||||||
|
<rect key="frame" x="0.0" y="20" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</navigationBar>
|
||||||
|
<nil name="viewControllers"/>
|
||||||
|
<connections>
|
||||||
|
<segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="v9Q-2O-OOv"/>
|
||||||
|
</connections>
|
||||||
|
</navigationController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="sjw-k6-nEt" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
<point key="canvasLocation" x="815.20000000000005" y="138.98050974512745"/>
|
<point key="canvasLocation" x="815.20000000000005" y="138.98050974512745"/>
|
||||||
</scene>
|
</scene>
|
||||||
</scenes>
|
</scenes>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class ViewController: UIViewController {
|
|||||||
let openSourceVC = OpenSourceController()
|
let openSourceVC = OpenSourceController()
|
||||||
|
|
||||||
// Apply some customisation if you want
|
// Apply some customisation if you want
|
||||||
//self.controllerCustomUI(openSourceVC: openSourceVC)
|
//self.applyCustomUI(openSourceVC: openSourceVC)
|
||||||
|
|
||||||
// Init with LicenceFile object
|
// Init with LicenceFile object
|
||||||
openSourceVC.licences = [LicenceFile(title: "FacebookImagePicker",
|
openSourceVC.licences = [LicenceFile(title: "FacebookImagePicker",
|
||||||
@@ -37,40 +37,41 @@ class ViewController: UIViewController {
|
|||||||
url: "https://raw.githubusercontent.com/nickoneill/PermissionScope/master/LICENSE"),
|
url: "https://raw.githubusercontent.com/nickoneill/PermissionScope/master/LICENSE"),
|
||||||
LicenceFile(title: "EasyTipView",
|
LicenceFile(title: "EasyTipView",
|
||||||
url: "https://raw.githubusercontent.com/teodorpatras/EasyTipView/master/LICENSE"),
|
url: "https://raw.githubusercontent.com/teodorpatras/EasyTipView/master/LICENSE"),
|
||||||
LicenceFile(title: "ReachabilitySwift",
|
LicenceFile(title: "FakeAdress",
|
||||||
url: "https://raw.githubusercontent.com/ashleymills/Reachability.swift/master/LICENSE"),
|
url: "https://raw.giusercontent.com/ashleymills/Reachability.swift/master/LICENSE"),
|
||||||
LicenceFile(title: "KeychainAccess",
|
LicenceFile(title: "KeychainAccess",
|
||||||
url: "https://raw.githubusercontent.com/kishikawakatsumi/KeychainAccess/master/LICENSE")]
|
url: "https://raw.githubusercontent.com/kishikawakatsumi/KeychainAccess/master/LICENSE")]
|
||||||
|
|
||||||
// Present controller
|
// Present controller
|
||||||
openSourceVC.presentOpenSourceController(from: self)
|
openSourceVC.pushOpenSourceController(from: self)
|
||||||
|
//openSourceVC.presentOpenSourceController(from: self)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Customization
|
// MARK: - Customization
|
||||||
|
|
||||||
fileprivate func controllerCustomUI(openSourceVC: OpenSourceController) {
|
fileprivate func applyCustomUI(openSourceVC: OpenSourceController) {
|
||||||
// Navigation bar title
|
// Navigation bar title
|
||||||
openSourceVC.config.title = "MyCustomTitle"
|
openSourceVC.config.title = "MyCustomTitle"
|
||||||
|
|
||||||
// Navigation bar tint color
|
// Navigation bar tint color
|
||||||
openSourceVC.config.uiConfig.barTintColor = UIColor.red
|
openSourceVC.config.uiConfig.barTintColor = UIColor.red
|
||||||
|
|
||||||
// Close button color
|
// Close button color
|
||||||
openSourceVC.config.uiConfig.closeButtonColor = UIColor.white
|
openSourceVC.config.uiConfig.closeButtonColor = UIColor.green
|
||||||
|
|
||||||
// BackgroundColor
|
// BackgroundColor
|
||||||
openSourceVC.config.uiConfig.backgroundColor = UIColor.red.withAlphaComponent(0.6)
|
openSourceVC.config.uiConfig.backgroundColor = UIColor.red.withAlphaComponent(0.6)
|
||||||
|
|
||||||
// Licence text color
|
// Licence text color
|
||||||
openSourceVC.config.uiConfig.licenceTextColor = UIColor.white
|
openSourceVC.config.uiConfig.licenceTextColor = UIColor.green
|
||||||
|
|
||||||
// Navigation bar title color
|
// Navigation bar title color
|
||||||
openSourceVC.config.uiConfig.titleColor = UIColor.white
|
openSourceVC.config.uiConfig.titleColor = UIColor.green
|
||||||
|
|
||||||
// Licence cell background color
|
// Licence cell background color
|
||||||
openSourceVC.config.uiConfig.licenceBackgroundColor = UIColor.red
|
openSourceVC.config.uiConfig.licenceBackgroundColor = UIColor.red
|
||||||
|
|
||||||
// Verbose mode
|
// Verbose mode
|
||||||
openSourceVC.config.verbose = true
|
openSourceVC.config.verbose = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
Pod::Spec.new do |s|
|
Pod::Spec.new do |s|
|
||||||
s.name = 'OpenSourceController'
|
s.name = 'OpenSourceController'
|
||||||
s.version = '3.0.0'
|
s.version = '3.1.0'
|
||||||
s.summary = 'Display all the librarys licence used in your application. Enjoy !'
|
s.summary = 'Display all the librarys licence used in your application. Enjoy !'
|
||||||
s.description = 'Display a screen with all licence used in your apply can be painful to maintain. OpenSourceController was built to respond to this problem. OpenSourceController is a simple parser to display the licences which are used in your application.'
|
s.description = 'Display a screen with all licence used in your apply can be painful to maintain. OpenSourceController was built to respond to this problem. OpenSourceController is a simple parser to display the licences which are used in your application.'
|
||||||
s.homepage = 'https://github.com/floriangbh/OpenSourceController'
|
s.homepage = 'https://github.com/floriangbh/OpenSourceController'
|
||||||
|
|||||||
@@ -8,13 +8,18 @@
|
|||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
52D6D9871BEFF229002C0205 /* OpenSourceController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52D6D97C1BEFF229002C0205 /* OpenSourceController.framework */; };
|
52D6D9871BEFF229002C0205 /* OpenSourceController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52D6D97C1BEFF229002C0205 /* OpenSourceController.framework */; };
|
||||||
76EAA8441E93EDA5009A41DA /* OpenSourceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8421E93EDA5009A41DA /* OpenSourceController.swift */; };
|
76229B6E2180AD6400A61697 /* UIViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B6C2180AD6400A61697 /* UIViewController+Extensions.swift */; };
|
||||||
76EAA8451E93EDA5009A41DA /* OpenSourceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8431E93EDA5009A41DA /* OpenSourceViewController.swift */; };
|
76229B6F2180AD6400A61697 /* UIView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B6D2180AD6400A61697 /* UIView+Extensions.swift */; };
|
||||||
|
76229B722180AD8400A61697 /* LicenceLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B712180AD8400A61697 /* LicenceLoader.swift */; };
|
||||||
|
76229B772180AD8B00A61697 /* OpenSourceTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B732180AD8B00A61697 /* OpenSourceTableViewCell.swift */; };
|
||||||
|
76229B782180AD8B00A61697 /* LoadingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B742180AD8B00A61697 /* LoadingViewController.swift */; };
|
||||||
|
76229B792180AD8B00A61697 /* OpenSourceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B752180AD8B00A61697 /* OpenSourceViewController.swift */; };
|
||||||
|
76229B7A2180AD8B00A61697 /* LicenceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B762180AD8B00A61697 /* LicenceListViewController.swift */; };
|
||||||
|
76229B7D2180AD9F00A61697 /* HTTPDataLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B7C2180AD9F00A61697 /* HTTPDataLoader.swift */; };
|
||||||
|
76229B802180ADA800A61697 /* OpenSourceControllerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B7E2180ADA800A61697 /* OpenSourceControllerConfig.swift */; };
|
||||||
|
76229B812180ADA800A61697 /* OpenSourceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B7F2180ADA800A61697 /* OpenSourceController.swift */; };
|
||||||
76EAA8481E93EDB3009A41DA /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8471E93EDB3009A41DA /* Array+Extensions.swift */; };
|
76EAA8481E93EDB3009A41DA /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8471E93EDB3009A41DA /* Array+Extensions.swift */; };
|
||||||
76EAA84E1E93EDCD009A41DA /* LicenceDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA84B1E93EDCD009A41DA /* LicenceDownloader.swift */; };
|
|
||||||
76EAA84F1E93EDCD009A41DA /* LicenceFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA84C1E93EDCD009A41DA /* LicenceFile.swift */; };
|
76EAA84F1E93EDCD009A41DA /* LicenceFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA84C1E93EDCD009A41DA /* LicenceFile.swift */; };
|
||||||
76EAA8501E93EDCD009A41DA /* OpenSourceControllerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA84D1E93EDCD009A41DA /* OpenSourceControllerConfig.swift */; };
|
|
||||||
76EAA8531E93EDF0009A41DA /* OpenSourceTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8521E93EDF0009A41DA /* OpenSourceTableViewCell.swift */; };
|
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
@@ -30,13 +35,18 @@
|
|||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
52D6D97C1BEFF229002C0205 /* OpenSourceController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OpenSourceController.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
52D6D97C1BEFF229002C0205 /* OpenSourceController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OpenSourceController.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
52D6D9861BEFF229002C0205 /* OpenSourceController-iOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "OpenSourceController-iOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
52D6D9861BEFF229002C0205 /* OpenSourceController-iOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "OpenSourceController-iOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
76EAA8421E93EDA5009A41DA /* OpenSourceController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceController.swift; path = Sources/Controller/OpenSourceController.swift; sourceTree = "<group>"; };
|
76229B6C2180AD6400A61697 /* UIViewController+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIViewController+Extensions.swift"; path = "Sources/Extensions/UIViewController+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
76EAA8431E93EDA5009A41DA /* OpenSourceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceViewController.swift; path = Sources/Controller/OpenSourceViewController.swift; sourceTree = "<group>"; };
|
76229B6D2180AD6400A61697 /* UIView+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIView+Extensions.swift"; path = "Sources/Extensions/UIView+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
|
76229B712180AD8400A61697 /* LicenceLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceLoader.swift; path = Sources/Model/LicenceLoader.swift; sourceTree = "<group>"; };
|
||||||
|
76229B732180AD8B00A61697 /* OpenSourceTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceTableViewCell.swift; path = Sources/OpenSourceViewController/OpenSourceTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
|
76229B742180AD8B00A61697 /* LoadingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LoadingViewController.swift; path = Sources/OpenSourceViewController/LoadingViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76229B752180AD8B00A61697 /* OpenSourceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceViewController.swift; path = Sources/OpenSourceViewController/OpenSourceViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76229B762180AD8B00A61697 /* LicenceListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceListViewController.swift; path = Sources/OpenSourceViewController/LicenceListViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76229B7C2180AD9F00A61697 /* HTTPDataLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HTTPDataLoader.swift; path = Sources/Loader/HTTPDataLoader.swift; sourceTree = "<group>"; };
|
||||||
|
76229B7E2180ADA800A61697 /* OpenSourceControllerConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceControllerConfig.swift; path = Sources/OpenSourceControllerConfig.swift; sourceTree = "<group>"; };
|
||||||
|
76229B7F2180ADA800A61697 /* OpenSourceController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceController.swift; path = Sources/OpenSourceController.swift; sourceTree = "<group>"; };
|
||||||
76EAA8471E93EDB3009A41DA /* Array+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Array+Extensions.swift"; path = "Sources/Extensions/Array+Extensions.swift"; sourceTree = "<group>"; };
|
76EAA8471E93EDB3009A41DA /* Array+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Array+Extensions.swift"; path = "Sources/Extensions/Array+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
76EAA84B1E93EDCD009A41DA /* LicenceDownloader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceDownloader.swift; path = Sources/Model/LicenceDownloader.swift; sourceTree = "<group>"; };
|
|
||||||
76EAA84C1E93EDCD009A41DA /* LicenceFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceFile.swift; path = Sources/Model/LicenceFile.swift; sourceTree = "<group>"; };
|
76EAA84C1E93EDCD009A41DA /* LicenceFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceFile.swift; path = Sources/Model/LicenceFile.swift; sourceTree = "<group>"; };
|
||||||
76EAA84D1E93EDCD009A41DA /* OpenSourceControllerConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceControllerConfig.swift; path = Sources/Model/OpenSourceControllerConfig.swift; sourceTree = "<group>"; };
|
|
||||||
76EAA8521E93EDF0009A41DA /* OpenSourceTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceTableViewCell.swift; path = Sources/View/OpenSourceTableViewCell.swift; sourceTree = "<group>"; };
|
|
||||||
AD2FAA261CD0B6D800659CF4 /* OpenSourceController.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = OpenSourceController.plist; sourceTree = "<group>"; };
|
AD2FAA261CD0B6D800659CF4 /* OpenSourceController.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = OpenSourceController.plist; sourceTree = "<group>"; };
|
||||||
AD2FAA281CD0B6E100659CF4 /* OpenSourceControllerTests.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = OpenSourceControllerTests.plist; sourceTree = "<group>"; };
|
AD2FAA281CD0B6E100659CF4 /* OpenSourceControllerTests.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = OpenSourceControllerTests.plist; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
@@ -87,18 +97,28 @@
|
|||||||
path = Configs;
|
path = Configs;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
76EAA8461E93EDA9009A41DA /* Controller */ = {
|
76229B702180AD7700A61697 /* Model */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
76EAA8421E93EDA5009A41DA /* OpenSourceController.swift */,
|
76229B712180AD8400A61697 /* LicenceLoader.swift */,
|
||||||
76EAA8431E93EDA5009A41DA /* OpenSourceViewController.swift */,
|
76EAA84C1E93EDCD009A41DA /* LicenceFile.swift */,
|
||||||
);
|
);
|
||||||
name = Controller;
|
name = Model;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
76229B7B2180AD8E00A61697 /* Loader */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76229B7C2180AD9F00A61697 /* HTTPDataLoader.swift */,
|
||||||
|
);
|
||||||
|
name = Loader;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
76EAA8491E93EDBB009A41DA /* Extensions */ = {
|
76EAA8491E93EDBB009A41DA /* Extensions */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
76229B6D2180AD6400A61697 /* UIView+Extensions.swift */,
|
||||||
|
76229B6C2180AD6400A61697 /* UIViewController+Extensions.swift */,
|
||||||
76EAA8471E93EDB3009A41DA /* Array+Extensions.swift */,
|
76EAA8471E93EDB3009A41DA /* Array+Extensions.swift */,
|
||||||
);
|
);
|
||||||
name = Extensions;
|
name = Extensions;
|
||||||
@@ -107,30 +127,25 @@
|
|||||||
76EAA84A1E93EDC0009A41DA /* Sources */ = {
|
76EAA84A1E93EDC0009A41DA /* Sources */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
76EAA8511E93EDD2009A41DA /* Model */,
|
76229B7F2180ADA800A61697 /* OpenSourceController.swift */,
|
||||||
76EAA8541E93EDF3009A41DA /* View */,
|
76229B7E2180ADA800A61697 /* OpenSourceControllerConfig.swift */,
|
||||||
76EAA8461E93EDA9009A41DA /* Controller */,
|
76229B7B2180AD8E00A61697 /* Loader */,
|
||||||
|
76229B702180AD7700A61697 /* Model */,
|
||||||
|
76EAA8511E93EDD2009A41DA /* Controller */,
|
||||||
76EAA8491E93EDBB009A41DA /* Extensions */,
|
76EAA8491E93EDBB009A41DA /* Extensions */,
|
||||||
);
|
);
|
||||||
name = Sources;
|
name = Sources;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
76EAA8511E93EDD2009A41DA /* Model */ = {
|
76EAA8511E93EDD2009A41DA /* Controller */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
76EAA84B1E93EDCD009A41DA /* LicenceDownloader.swift */,
|
76229B762180AD8B00A61697 /* LicenceListViewController.swift */,
|
||||||
76EAA84C1E93EDCD009A41DA /* LicenceFile.swift */,
|
76229B742180AD8B00A61697 /* LoadingViewController.swift */,
|
||||||
76EAA84D1E93EDCD009A41DA /* OpenSourceControllerConfig.swift */,
|
76229B732180AD8B00A61697 /* OpenSourceTableViewCell.swift */,
|
||||||
|
76229B752180AD8B00A61697 /* OpenSourceViewController.swift */,
|
||||||
);
|
);
|
||||||
name = Model;
|
name = Controller;
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
76EAA8541E93EDF3009A41DA /* View */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
76EAA8521E93EDF0009A41DA /* OpenSourceTableViewCell.swift */,
|
|
||||||
);
|
|
||||||
name = View;
|
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
DD7502721C68FC1B006590AF /* Frameworks */ = {
|
DD7502721C68FC1B006590AF /* Frameworks */ = {
|
||||||
@@ -261,13 +276,18 @@
|
|||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
76EAA84E1E93EDCD009A41DA /* LicenceDownloader.swift in Sources */,
|
76229B782180AD8B00A61697 /* LoadingViewController.swift in Sources */,
|
||||||
|
76229B772180AD8B00A61697 /* OpenSourceTableViewCell.swift in Sources */,
|
||||||
|
76229B7D2180AD9F00A61697 /* HTTPDataLoader.swift in Sources */,
|
||||||
|
76229B7A2180AD8B00A61697 /* LicenceListViewController.swift in Sources */,
|
||||||
|
76229B6F2180AD6400A61697 /* UIView+Extensions.swift in Sources */,
|
||||||
|
76229B792180AD8B00A61697 /* OpenSourceViewController.swift in Sources */,
|
||||||
76EAA84F1E93EDCD009A41DA /* LicenceFile.swift in Sources */,
|
76EAA84F1E93EDCD009A41DA /* LicenceFile.swift in Sources */,
|
||||||
76EAA8441E93EDA5009A41DA /* OpenSourceController.swift in Sources */,
|
76229B722180AD8400A61697 /* LicenceLoader.swift in Sources */,
|
||||||
|
76229B812180ADA800A61697 /* OpenSourceController.swift in Sources */,
|
||||||
|
76229B6E2180AD6400A61697 /* UIViewController+Extensions.swift in Sources */,
|
||||||
|
76229B802180ADA800A61697 /* OpenSourceControllerConfig.swift in Sources */,
|
||||||
76EAA8481E93EDB3009A41DA /* Array+Extensions.swift in Sources */,
|
76EAA8481E93EDB3009A41DA /* Array+Extensions.swift in Sources */,
|
||||||
76EAA8531E93EDF0009A41DA /* OpenSourceTableViewCell.swift in Sources */,
|
|
||||||
76EAA8501E93EDCD009A41DA /* OpenSourceControllerConfig.swift in Sources */,
|
|
||||||
76EAA8451E93EDA5009A41DA /* OpenSourceViewController.swift in Sources */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|||||||
BIN
Binary file not shown.
@@ -33,20 +33,21 @@ Display a screen with all licences used in your application can be painful to ma
|
|||||||
- [ ] Download licence from Podfile (https://github.com/terflogag/OpenSourceController/issues/1)
|
- [ ] Download licence from Podfile (https://github.com/terflogag/OpenSourceController/issues/1)
|
||||||
- [ ] Download licence from Cartfile (https://github.com/terflogag/OpenSourceController/issues/2)
|
- [ ] Download licence from Cartfile (https://github.com/terflogag/OpenSourceController/issues/2)
|
||||||
- [ ] Download licence from local file
|
- [ ] Download licence from local file
|
||||||
- [ ] Unit & UI Test
|
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
* Xcode 9
|
* Xcode 9
|
||||||
* iOS 9.0+ target deployment
|
* iOS 9.0+ target deployment
|
||||||
* Swift 3 or Swift 4 project
|
* Swift 3, Swift 4 or Swift 4.2 project
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
- To integrate OpenSourceController into your Xcode project using [CocoaPods](http://cocoapods.org), specify it in your Podfile :
|
- To integrate OpenSourceController into your Xcode project using [CocoaPods](http://cocoapods.org), specify it in your Podfile :
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
pod "OpenSourceController", '~> 2.0'
|
pod "OpenSourceController", '~> 3.0.0' # Swift 4.2 Version
|
||||||
|
|
||||||
|
pod "OpenSourceController", '~> 2.0' # Swift 4.0 Version
|
||||||
|
|
||||||
pod "OpenSourceController", '~> 1.0.8' # Swift 3.1 version
|
pod "OpenSourceController", '~> 1.0.8' # Swift 3.1 version
|
||||||
```
|
```
|
||||||
@@ -54,7 +55,9 @@ pod "OpenSourceController", '~> 1.0.8' # Swift 3.1 version
|
|||||||
- To integrate OpenSourceController into your Xcode project using [Carthage](https://github.com/Carthage/Carthage), specify it in your Cartfile :
|
- To integrate OpenSourceController into your Xcode project using [Carthage](https://github.com/Carthage/Carthage), specify it in your Cartfile :
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
github "floriangbh/OpenSourceController" ~> 2.0
|
github "floriangbh/OpenSourceController" ~> 3.0.0 # Swift 4.2 version
|
||||||
|
|
||||||
|
github "floriangbh/OpenSourceController" ~> 2.0 # Swift 4.0 version
|
||||||
|
|
||||||
github "floriangbh/OpenSourceController" ~> 1.0.8 # Swift 3.1 version
|
github "floriangbh/OpenSourceController" ~> 1.0.8 # Swift 3.1 version
|
||||||
```
|
```
|
||||||
@@ -75,9 +78,9 @@ let openSourceVC = OpenSourceController()
|
|||||||
|
|
||||||
// Init with LicenceFile object
|
// Init with LicenceFile object
|
||||||
openSourceVC.licences = [LicenceFile(title: "FacebookImagePicker",
|
openSourceVC.licences = [LicenceFile(title: "FacebookImagePicker",
|
||||||
url: "https://raw.githubusercontent.com/terflogag/FacebookImagePicker/master/LICENSE"),
|
url: "https://raw.githubusercontent.com/terflogag/FacebookImagePicker/master/LICENSE"),
|
||||||
LicenceFile(title: "JSQMessagesViewController",
|
LicenceFile(title: "JSQMessagesViewController",
|
||||||
url: "https://raw.githubusercontent.com/jessesquires/JSQMessagesViewController/develop/LICENSE")]
|
url: "https://raw.githubusercontent.com/jessesquires/JSQMessagesViewController/develop/LICENSE")]
|
||||||
|
|
||||||
// Present controller
|
// Present controller
|
||||||
openSourceVC.presentOpenSourceController(from: self)
|
openSourceVC.presentOpenSourceController(from: self)
|
||||||
|
|||||||
@@ -1,212 +0,0 @@
|
|||||||
//
|
|
||||||
// OpenSourceViewController.swift
|
|
||||||
// Pods
|
|
||||||
//
|
|
||||||
// Created by Florian Gabach on 05/02/2017.
|
|
||||||
|
|
||||||
import UIKit
|
|
||||||
|
|
||||||
class OpenSourceViewController: UITableViewController {
|
|
||||||
|
|
||||||
// MARK: - Var
|
|
||||||
|
|
||||||
/// Loading indicator
|
|
||||||
fileprivate lazy var indicator: UIActivityIndicatorView = {
|
|
||||||
let indicator = UIActivityIndicatorView(frame:CGRect(x: 0,
|
|
||||||
y: 0,
|
|
||||||
width: 40,
|
|
||||||
height: 40) )
|
|
||||||
indicator.style = UIActivityIndicatorView.Style.gray
|
|
||||||
indicator.hidesWhenStopped = true
|
|
||||||
indicator.backgroundColor = UIColor.clear
|
|
||||||
indicator.color = UIColor.black
|
|
||||||
return indicator
|
|
||||||
}()
|
|
||||||
|
|
||||||
/// TableViewCell identifier
|
|
||||||
private let reuseIdentifier = "openSourceCell"
|
|
||||||
|
|
||||||
/// Contains all licence object before downloaded
|
|
||||||
internal var licences: [LicenceFile]?
|
|
||||||
|
|
||||||
/// Controller configuration for customization
|
|
||||||
internal var config = OpenSourceControllerConfig()
|
|
||||||
|
|
||||||
/// Do we need to show the close button ? (disable if push the controller)
|
|
||||||
internal var showCloseButton: Bool = true
|
|
||||||
|
|
||||||
/// Contains all licences object after downloaded
|
|
||||||
fileprivate var downloadedLicence: [LicenceFile]? {
|
|
||||||
didSet {
|
|
||||||
// Update UI
|
|
||||||
DispatchQueue.main.async { [weak self] in
|
|
||||||
self?.stopLoading()
|
|
||||||
self?.tableView.reloadData()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Lifecyle
|
|
||||||
|
|
||||||
override func viewDidLoad() {
|
|
||||||
super.viewDidLoad()
|
|
||||||
|
|
||||||
// Prepare controller
|
|
||||||
self.prepare()
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Prepare
|
|
||||||
|
|
||||||
/// Prepare controller
|
|
||||||
fileprivate func prepare() {
|
|
||||||
self.prepareTableView()
|
|
||||||
self.prepareActivityIndicator()
|
|
||||||
|
|
||||||
if showCloseButton {
|
|
||||||
self.prepareCloseButton()
|
|
||||||
}
|
|
||||||
|
|
||||||
self.prepareStyle()
|
|
||||||
self.prepareLicences()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Download licences
|
|
||||||
fileprivate func prepareLicences() {
|
|
||||||
self.startLoading()
|
|
||||||
|
|
||||||
// Retrieve licence
|
|
||||||
guard let licences = self.licences else {
|
|
||||||
print("No licences found.")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Download licence
|
|
||||||
LicenceDownloader.downloadLicences(licences: licences,
|
|
||||||
config: self.config) { () in
|
|
||||||
// Update licences
|
|
||||||
self.downloadedLicence = self.licences
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Init tableView dataSource, delegate, bar button & title
|
|
||||||
fileprivate func prepareTableView() {
|
|
||||||
// Common init
|
|
||||||
self.tableView.tableFooterView = UIView()
|
|
||||||
self.tableView.register(OpenSourceTableViewCell.self, forCellReuseIdentifier: self.reuseIdentifier)
|
|
||||||
self.title = self.config.title
|
|
||||||
self.tableView.register(OpenSourceTableViewCell.self,
|
|
||||||
forCellReuseIdentifier: self.reuseIdentifier)
|
|
||||||
self.tableView.dataSource = self
|
|
||||||
self.tableView.delegate = self
|
|
||||||
self.tableView.separatorStyle = .singleLine
|
|
||||||
|
|
||||||
// Apply background color from configuration if needed
|
|
||||||
if let backgroundColor = self.config.uiConfig.backgroundColor {
|
|
||||||
self.tableView.backgroundColor = backgroundColor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Prepare controller style
|
|
||||||
fileprivate func prepareStyle() {
|
|
||||||
// Apply navigation bar tint color if needed
|
|
||||||
if let tintColor = self.config.uiConfig.barTintColor {
|
|
||||||
self.navigationController?.navigationBar.barTintColor = tintColor
|
|
||||||
}
|
|
||||||
|
|
||||||
// Applu navigation bar text color if needed
|
|
||||||
if let textColor = self.config.uiConfig.titleColor {
|
|
||||||
let attribut = [NSAttributedString.Key.foregroundColor: textColor]
|
|
||||||
self.navigationController?.navigationBar.titleTextAttributes = attribut
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Prepare close button on navigation bar
|
|
||||||
fileprivate func prepareCloseButton() {
|
|
||||||
// Close button (on the right corner of navigation bar)
|
|
||||||
let closeButton = UIBarButtonItem(barButtonSystemItem: .stop,
|
|
||||||
target: self,
|
|
||||||
action: #selector(self.closePicker))
|
|
||||||
closeButton.tintColor = config.uiConfig.closeButtonColor ?? UIColor.black
|
|
||||||
self.navigationItem.rightBarButtonItem = closeButton
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Loading indicator
|
|
||||||
|
|
||||||
/// Prepare UIActivityIndicatorView and display it at the center of the view
|
|
||||||
fileprivate func prepareActivityIndicator() {
|
|
||||||
// Add to view
|
|
||||||
self.view.addSubview(indicator)
|
|
||||||
|
|
||||||
// Apply constraint
|
|
||||||
self.indicator.translatesAutoresizingMaskIntoConstraints = false
|
|
||||||
self.indicator.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
|
|
||||||
let topConstraint = self.navigationController?.navigationBar.frame.size.height ?? 0.0
|
|
||||||
self.indicator.bottomAnchor.constraint(equalTo: view.topAnchor, constant: topConstraint).isActive=true
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Start loading : start the loader animation
|
|
||||||
fileprivate func startLoading() {
|
|
||||||
self.indicator.startAnimating()
|
|
||||||
self.indicator.isHidden = false
|
|
||||||
|
|
||||||
// Disable scroll
|
|
||||||
self.tableView.isScrollEnabled = false
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Stop loading : stop and hide the loader
|
|
||||||
fileprivate func stopLoading() {
|
|
||||||
self.indicator.stopAnimating()
|
|
||||||
self.indicator.isHidden = true
|
|
||||||
|
|
||||||
// Enable scroll
|
|
||||||
self.tableView.isScrollEnabled = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Table View Data Source
|
|
||||||
|
|
||||||
override func numberOfSections(in tableView: UITableView) -> Int {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
|
||||||
return self.downloadedLicence?.count ?? 0
|
|
||||||
}
|
|
||||||
|
|
||||||
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
|
||||||
var cell = tableView.dequeueReusableCell(withIdentifier: self.reuseIdentifier,
|
|
||||||
for: indexPath) as? OpenSourceTableViewCell
|
|
||||||
// Init cell
|
|
||||||
if cell == nil {
|
|
||||||
cell = OpenSourceTableViewCell(style: UITableViewCell.CellStyle.default,
|
|
||||||
reuseIdentifier: self.reuseIdentifier)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Configure the cell with licence
|
|
||||||
if let licence = self.downloadedLicence?.get(at: indexPath.row) {
|
|
||||||
cell?.configure(licence: licence, config: self.config)
|
|
||||||
}
|
|
||||||
|
|
||||||
return cell!
|
|
||||||
}
|
|
||||||
|
|
||||||
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
|
|
||||||
// Automatic dimension
|
|
||||||
return UITableView.automaticDimension
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Action
|
|
||||||
|
|
||||||
/// Handler for click on close button
|
|
||||||
@objc fileprivate func closePicker() {
|
|
||||||
self.dismissController()
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Navigation
|
|
||||||
|
|
||||||
/// Dismiss the OpenSourceController
|
|
||||||
func dismissController() {
|
|
||||||
DispatchQueue.main.async { [weak self] in
|
|
||||||
self?.dismiss(animated: true, completion: nil)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -7,13 +7,14 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
extension Array {
|
extension Array {
|
||||||
/// Get an index safely
|
|
||||||
|
// MARK: - Helper
|
||||||
|
|
||||||
func get(at index: Int) -> Element? {
|
func get(at index: Int) -> Element? {
|
||||||
guard index >= 0
|
guard index >= 0
|
||||||
&& index < count else {
|
&& index < count else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return self[index]
|
return self[index]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 23/10/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UIView {
|
||||||
|
|
||||||
|
// MARK: - Layout
|
||||||
|
|
||||||
|
func pinEdges(to other: UIView, withBorderSize size: CGFloat = 0.0) {
|
||||||
|
self.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
self.leadingAnchor.constraint(equalTo: other.leadingAnchor, constant: size).isActive = true
|
||||||
|
self.trailingAnchor.constraint(equalTo: other.trailingAnchor, constant: size).isActive = true
|
||||||
|
self.topAnchor.constraint(equalTo: other.topAnchor, constant: size).isActive = true
|
||||||
|
self.bottomAnchor.constraint(equalTo: other.bottomAnchor, constant: -size).isActive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
func pinCenter(to other: UIView) {
|
||||||
|
self.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
self.centerXAnchor.constraint(equalTo: other.centerXAnchor).isActive = true
|
||||||
|
self.centerYAnchor.constraint(equalTo: other.centerYAnchor).isActive = true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
//
|
||||||
|
// UIViewController+Extensions.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 23/10/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UIViewController {
|
||||||
|
|
||||||
|
// MARK: - Child
|
||||||
|
|
||||||
|
func add(_ child: UIViewController) {
|
||||||
|
self.addChild(child)
|
||||||
|
self.view.addSubview(child.view)
|
||||||
|
child.didMove(toParent: self)
|
||||||
|
}
|
||||||
|
|
||||||
|
func remove() {
|
||||||
|
guard parent != nil else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.willMove(toParent: nil)
|
||||||
|
self.removeFromParent()
|
||||||
|
self.view.removeFromSuperview()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
//
|
||||||
|
// LicenceHTTPLoader.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 24/10/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
final class HTTPDataLoader {
|
||||||
|
func loadData(fromUrl url: String, completion: @escaping (Data?) -> Void) {
|
||||||
|
if let url = URL(string: url) {
|
||||||
|
let task = URLSession.shared.dataTask(with: url) { (data, _, error) in
|
||||||
|
if error != nil {
|
||||||
|
print("OpenSourceController error : \(error?.localizedDescription ?? "") from url : \(url)")
|
||||||
|
}
|
||||||
|
completion(data)
|
||||||
|
}
|
||||||
|
task.resume()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
public class LicenceFile: NSObject {
|
public final class LicenceFile {
|
||||||
|
|
||||||
// MARK- Var
|
// MARK- Var
|
||||||
|
|
||||||
@@ -18,6 +18,16 @@ public class LicenceFile: NSObject {
|
|||||||
|
|
||||||
/// Library's licence
|
/// Library's licence
|
||||||
var detail: String?
|
var detail: String?
|
||||||
|
|
||||||
|
/// Build attributed text
|
||||||
|
lazy var attributedContent: NSAttributedString = {
|
||||||
|
let libraryTitleAttribut = [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: UIFont.systemFontSize + 2)]
|
||||||
|
let libraryLicenceAttribut = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: UIFont.systemFontSize)]
|
||||||
|
let libraryTitle = NSMutableAttributedString(string: self.title ?? "", attributes: libraryTitleAttribut)
|
||||||
|
libraryTitle.append(NSAttributedString(string: "\n\n"))
|
||||||
|
libraryTitle.append(NSAttributedString(string: self.detail ?? "", attributes: libraryLicenceAttribut))
|
||||||
|
return libraryTitle
|
||||||
|
}()
|
||||||
|
|
||||||
// MARK- Init
|
// MARK- Init
|
||||||
|
|
||||||
@@ -29,8 +39,7 @@ public class LicenceFile: NSObject {
|
|||||||
public init(title: String, url: String) {
|
public init(title: String, url: String) {
|
||||||
self.title = title
|
self.title = title
|
||||||
self.url = url
|
self.url = url
|
||||||
self.detail = NSLocalizedString("Unable to load this licence file.",
|
self.detail = NSLocalizedString("Unable to load this licence file.", comment: "")
|
||||||
comment: "")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Download licence detail
|
/// Download licence detail
|
||||||
@@ -38,22 +47,12 @@ public class LicenceFile: NSObject {
|
|||||||
/// - Parameter completion: end of download handler
|
/// - Parameter completion: end of download handler
|
||||||
func downloadLicenceDetail(config: OpenSourceControllerConfig,
|
func downloadLicenceDetail(config: OpenSourceControllerConfig,
|
||||||
completion: @escaping () -> Void) {
|
completion: @escaping () -> Void) {
|
||||||
if let url = URL(string: self.url) {
|
let licenceHTTPLoader = HTTPDataLoader()
|
||||||
let task = URLSession.shared.dataTask(with: url) { (data, _, _) in
|
licenceHTTPLoader.loadData(fromUrl: self.url) { (data) in
|
||||||
if let data = data,
|
if let data = data, let html = String(data: data, encoding: String.Encoding.utf8) {
|
||||||
let html = String(data: data, encoding: String.Encoding.utf8) {
|
self.detail = html
|
||||||
|
|
||||||
// Update licence model
|
|
||||||
self.detail = html
|
|
||||||
|
|
||||||
// Log
|
|
||||||
if config.verbose {
|
|
||||||
print("Licence for \(self.title ?? "") downloaded with success.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
completion()
|
|
||||||
}
|
}
|
||||||
task.resume()
|
completion()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class LicenceDownloader: NSObject {
|
final class LicenceLoader {
|
||||||
|
|
||||||
/// Download every licence
|
/// Download every licence
|
||||||
///
|
///
|
||||||
@@ -6,31 +6,20 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
public class OpenSourceController: NSObject {
|
open class OpenSourceController: NSObject {
|
||||||
|
|
||||||
// Contains list of licence object
|
// Contains list of licence object
|
||||||
open var licences: [LicenceFile]?
|
open var licences: [LicenceFile] = []
|
||||||
|
|
||||||
// Configuration
|
// Open source controller Configuration object
|
||||||
open var config = OpenSourceControllerConfig()
|
open var config = OpenSourceControllerConfig()
|
||||||
|
|
||||||
/// Present OpenSourceViewController embbeded in navigation controller
|
/// Present OpenSourceViewController embbeded in navigation controller
|
||||||
///
|
///
|
||||||
/// - Parameter from: the source controller
|
/// - Parameter from: the source controller
|
||||||
open func presentOpenSourceController(from: UIViewController) {
|
open func presentOpenSourceController(from: UIViewController) {
|
||||||
// Create open source controller
|
let licenceController = OpenSourceViewController(licences: licences, showCloseButton: true, configuration: config)
|
||||||
let licenceController = OpenSourceViewController()
|
|
||||||
|
|
||||||
// Init licence
|
|
||||||
licenceController.licences = self.licences
|
|
||||||
|
|
||||||
// Init config
|
|
||||||
licenceController.config = self.config
|
|
||||||
|
|
||||||
// Embed in navigation controller
|
|
||||||
let navController = UINavigationController(rootViewController: licenceController)
|
let navController = UINavigationController(rootViewController: licenceController)
|
||||||
|
|
||||||
// Present controller
|
|
||||||
from.present(navController, animated: true)
|
from.present(navController, animated: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,19 +27,9 @@ public class OpenSourceController: NSObject {
|
|||||||
///
|
///
|
||||||
/// - Parameter from: the source controller
|
/// - Parameter from: the source controller
|
||||||
open func pushOpenSourceController(from: UIViewController) {
|
open func pushOpenSourceController(from: UIViewController) {
|
||||||
// Create open source controller
|
let licenceController = OpenSourceViewController(licences: licences, showCloseButton: false, configuration: config)
|
||||||
let licenceController = OpenSourceViewController()
|
|
||||||
licenceController.showCloseButton = false // Don't show close button
|
|
||||||
|
|
||||||
// Init licence
|
|
||||||
licenceController.licences = self.licences
|
|
||||||
|
|
||||||
// Init config
|
|
||||||
licenceController.config = self.config
|
|
||||||
|
|
||||||
// Push controller
|
|
||||||
guard let navigationController = from.navigationController else {
|
guard let navigationController = from.navigationController else {
|
||||||
print("Source controller isn't embeded in navigation controller. Can't push.")
|
assertionFailure("Source controller isn't embeded in navigation controller. Can't push.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
navigationController.pushViewController(licenceController, animated: true)
|
navigationController.pushViewController(licenceController, animated: true)
|
||||||
+1
-1
@@ -15,7 +15,7 @@ public struct OpenSourceControllerConfig {
|
|||||||
public var barTintColor: UIColor?
|
public var barTintColor: UIColor?
|
||||||
|
|
||||||
/// Will be applied to the navigation bar
|
/// Will be applied to the navigation bar
|
||||||
public var backgroundColor: UIColor?
|
public var backgroundColor: UIColor = .white
|
||||||
|
|
||||||
/// Will be applied to licence text
|
/// Will be applied to licence text
|
||||||
public var licenceBackgroundColor: UIColor?
|
public var licenceBackgroundColor: UIColor?
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
//
|
||||||
|
// LicenceListViewController.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 23/10/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
final class LicenceListViewController: UITableViewController {
|
||||||
|
|
||||||
|
// MARK: - Var
|
||||||
|
|
||||||
|
fileprivate let reuseIdentifier = "openSourceCell"
|
||||||
|
|
||||||
|
fileprivate var config: OpenSourceControllerConfig
|
||||||
|
|
||||||
|
fileprivate var downloadedLicence: [LicenceFile]
|
||||||
|
|
||||||
|
// MARK: - Lifecyle
|
||||||
|
|
||||||
|
init(downloadedLicence: [LicenceFile], config: OpenSourceControllerConfig) {
|
||||||
|
self.config = config
|
||||||
|
self.downloadedLicence = downloadedLicence
|
||||||
|
super.init(style: .plain)
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
self.prepareTableView()
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Prepare
|
||||||
|
|
||||||
|
fileprivate func prepareTableView() {
|
||||||
|
self.tableView.tableFooterView = UIView()
|
||||||
|
self.tableView.register(OpenSourceTableViewCell.self, forCellReuseIdentifier: self.reuseIdentifier)
|
||||||
|
self.tableView.dataSource = self
|
||||||
|
self.tableView.delegate = self
|
||||||
|
self.tableView.separatorStyle = .singleLine
|
||||||
|
self.tableView.backgroundColor = self.config.uiConfig.backgroundColor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension LicenceListViewController {
|
||||||
|
|
||||||
|
// MARK: - Table View Data Source
|
||||||
|
|
||||||
|
override func numberOfSections(in tableView: UITableView) -> Int {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||||
|
return self.downloadedLicence.count
|
||||||
|
}
|
||||||
|
|
||||||
|
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||||
|
var cell = tableView.dequeueReusableCell(withIdentifier: self.reuseIdentifier,
|
||||||
|
for: indexPath) as? OpenSourceTableViewCell
|
||||||
|
// Init cell
|
||||||
|
if cell == nil {
|
||||||
|
cell = OpenSourceTableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: self.reuseIdentifier)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure the cell with licence
|
||||||
|
if let licence = self.downloadedLicence.get(at: indexPath.row) {
|
||||||
|
cell?.configure(licence: licence, config: self.config)
|
||||||
|
}
|
||||||
|
|
||||||
|
return cell!
|
||||||
|
}
|
||||||
|
|
||||||
|
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
|
||||||
|
return UITableView.automaticDimension
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// LoadingViewController.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 23/10/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
final class LoadingViewController: UIViewController {
|
||||||
|
|
||||||
|
// MARK: - Var
|
||||||
|
|
||||||
|
fileprivate lazy var activityIndicator: UIActivityIndicatorView = {
|
||||||
|
let activityIndicator = UIActivityIndicatorView(style: UIActivityIndicatorView.Style.gray)
|
||||||
|
activityIndicator.startAnimating()
|
||||||
|
return activityIndicator
|
||||||
|
}()
|
||||||
|
|
||||||
|
fileprivate var config: OpenSourceControllerConfig
|
||||||
|
|
||||||
|
// MARK: - Lifecycle
|
||||||
|
|
||||||
|
init(configuration: OpenSourceControllerConfig) {
|
||||||
|
self.config = configuration
|
||||||
|
super.init(nibName: nil, bundle: nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
self.view.backgroundColor = self.config.uiConfig.backgroundColor
|
||||||
|
|
||||||
|
self.view.addSubview(self.activityIndicator)
|
||||||
|
self.activityIndicator.pinCenter(to: self.view)
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
-20
@@ -6,15 +6,12 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class OpenSourceTableViewCell: UITableViewCell {
|
final class OpenSourceTableViewCell: UITableViewCell {
|
||||||
|
|
||||||
// MARK: - Lifecycle
|
// MARK: - Lifecycle
|
||||||
|
|
||||||
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||||||
super.init(style: .default,
|
super.init(style: .default, reuseIdentifier: reuseIdentifier)
|
||||||
reuseIdentifier: reuseIdentifier)
|
|
||||||
|
|
||||||
// Prepare cell
|
|
||||||
self.prepareCellComponent()
|
self.prepareCellComponent()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -25,10 +22,7 @@ class OpenSourceTableViewCell: UITableViewCell {
|
|||||||
// MARK: - Prepare
|
// MARK: - Prepare
|
||||||
|
|
||||||
func prepareCellComponent() {
|
func prepareCellComponent() {
|
||||||
// Text
|
|
||||||
self.textLabel?.numberOfLines = 0
|
self.textLabel?.numberOfLines = 0
|
||||||
|
|
||||||
// Common init
|
|
||||||
self.accessoryType = .none
|
self.accessoryType = .none
|
||||||
self.selectionStyle = .none
|
self.selectionStyle = .none
|
||||||
}
|
}
|
||||||
@@ -39,21 +33,11 @@ class OpenSourceTableViewCell: UITableViewCell {
|
|||||||
///
|
///
|
||||||
/// - Parameter licence: the licence model
|
/// - Parameter licence: the licence model
|
||||||
func configure(licence: LicenceFile, config: OpenSourceControllerConfig) {
|
func configure(licence: LicenceFile, config: OpenSourceControllerConfig) {
|
||||||
|
|
||||||
// Build attributed text
|
|
||||||
let libraryTitleAttribut = [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: UIFont.systemFontSize + 2)]
|
|
||||||
let libraryLicenceAttribut = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: UIFont.systemFontSize)]
|
|
||||||
let libraryTitle = NSMutableAttributedString(string: licence.title ?? "",
|
|
||||||
attributes: libraryTitleAttribut)
|
|
||||||
libraryTitle.append(NSAttributedString(string: "\n\n"))
|
|
||||||
libraryTitle.append(NSAttributedString(string: licence.detail ?? "",
|
|
||||||
attributes: libraryLicenceAttribut))
|
|
||||||
|
|
||||||
// Set text
|
// Set text
|
||||||
self.textLabel?.attributedText = libraryTitle
|
self.textLabel?.attributedText = licence.attributedContent
|
||||||
self.textLabel?.textColor = config.uiConfig.licenceTextColor
|
self.textLabel?.textColor = config.uiConfig.licenceTextColor
|
||||||
|
|
||||||
// Background
|
// Background
|
||||||
if let backgroundColor = config.uiConfig.licenceBackgroundColor {
|
if let backgroundColor = config.uiConfig.licenceBackgroundColor {
|
||||||
self.backgroundColor = backgroundColor
|
self.backgroundColor = backgroundColor
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
//
|
||||||
|
// OpenSourceViewController.swift
|
||||||
|
// Pods
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 05/02/2017.
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
final class OpenSourceViewController: UIViewController {
|
||||||
|
|
||||||
|
// MARK: - Var
|
||||||
|
|
||||||
|
fileprivate var showCloseButton: Bool
|
||||||
|
|
||||||
|
fileprivate var licences: [LicenceFile]
|
||||||
|
|
||||||
|
fileprivate var config: OpenSourceControllerConfig
|
||||||
|
|
||||||
|
fileprivate lazy var loadingController = {
|
||||||
|
return LoadingViewController(configuration: config)
|
||||||
|
}()
|
||||||
|
|
||||||
|
fileprivate lazy var closeButton: UIBarButtonItem = {
|
||||||
|
let closeButton = UIBarButtonItem(barButtonSystemItem: .stop, target: self, action: #selector(self.closePicker))
|
||||||
|
closeButton.tintColor = self.config.uiConfig.closeButtonColor ?? UIColor.black
|
||||||
|
return closeButton
|
||||||
|
}()
|
||||||
|
|
||||||
|
// MARK: - Lifecyle
|
||||||
|
|
||||||
|
init(licences: [LicenceFile], showCloseButton: Bool, configuration: OpenSourceControllerConfig) {
|
||||||
|
self.licences = licences
|
||||||
|
self.showCloseButton = showCloseButton
|
||||||
|
self.config = configuration
|
||||||
|
super.init(nibName: nil, bundle: nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
self.title = self.config.title
|
||||||
|
|
||||||
|
self.prepareCloseButton()
|
||||||
|
self.prepareStyle()
|
||||||
|
|
||||||
|
self.add(self.loadingController)
|
||||||
|
self.prepareLicences()
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Prepare
|
||||||
|
|
||||||
|
fileprivate func prepareStyle() {
|
||||||
|
// Apply navigation bar tint color if needed
|
||||||
|
if let tintColor = self.config.uiConfig.barTintColor {
|
||||||
|
self.navigationController?.navigationBar.barTintColor = tintColor
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply navigation bar text color if needed
|
||||||
|
if let textColor = self.config.uiConfig.titleColor {
|
||||||
|
let attribut = [NSAttributedString.Key.foregroundColor: textColor]
|
||||||
|
self.navigationController?.navigationBar.titleTextAttributes = attribut
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate func prepareLicences() {
|
||||||
|
LicenceLoader.downloadLicences(licences: licences, config: config) { [weak self] in
|
||||||
|
guard let strongSelf = self else { return }
|
||||||
|
let listController = LicenceListViewController(downloadedLicence: strongSelf.licences, config: strongSelf.config)
|
||||||
|
strongSelf.loadingController.remove()
|
||||||
|
strongSelf.add(listController)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate func prepareCloseButton() {
|
||||||
|
if showCloseButton {
|
||||||
|
self.navigationItem.rightBarButtonItem = closeButton
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Action
|
||||||
|
|
||||||
|
@objc fileprivate func closePicker() {
|
||||||
|
self.dismiss(animated: true, completion: nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user