Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aa41530d47 | ||
|
|
1ac46a4859 | ||
|
|
2c02475a49 | ||
|
|
752558b420 | ||
|
|
1af6fa81f0 | ||
|
|
37c07f099a | ||
|
|
612bb4ca11 | ||
|
|
e6fcda22fc | ||
|
|
f9282dcef2 | ||
|
|
8e47206f83 | ||
|
|
aca50feac8 | ||
|
|
bdc6b5b6dd | ||
|
|
846edcd8c1 | ||
|
|
e9192698e9 | ||
|
|
226b1e3219 | ||
|
|
0f4a0dc5ad | ||
|
|
7eb1e95fd6 | ||
|
|
b38c71af0b | ||
|
|
4a34866bfc | ||
|
|
dca1bd740d | ||
|
|
73adcdcdad | ||
|
|
e75d19aac6 | ||
|
|
7a1565d631 | ||
|
|
15bdd515e7 | ||
|
|
cc51d8fa12 | ||
|
|
fcc1b6f893 | ||
|
|
2d989f3791 | ||
|
|
f5d6b49efe | ||
|
|
81d14e0abf | ||
|
|
443b32f5fe | ||
|
|
27ed32b7e1 | ||
|
|
5da43391f5 | ||
|
|
ee9f7efe68 | ||
|
|
0dbf658de9 | ||
|
|
016099a7c3 | ||
|
|
db3f5b2062 | ||
|
|
24c47fbcab | ||
|
|
11f73c553a | ||
|
|
a778f03d8f | ||
|
|
7dd51b88b8 | ||
|
|
fe086e3d34 | ||
|
|
c5947fa41b | ||
|
|
8ad819052c | ||
|
|
318d3e1f8e | ||
|
|
a7a6a1b315 | ||
|
|
96a45035a9 | ||
|
|
003ca5c285 | ||
|
|
bc2e69440c | ||
|
|
794d5a2d86 | ||
|
|
c5beca03f7 | ||
|
|
7ee4cfa0fd | ||
|
|
4dc34e956a | ||
|
|
584e357f0e | ||
|
|
243ee49fc1 | ||
|
|
5f53dbe6b5 | ||
|
|
97ceb32d29 | ||
|
|
29ce192b5c | ||
|
|
6974e707dc | ||
|
|
b93d2f0d2a | ||
|
|
2127942e5f | ||
|
|
fd1107d42e | ||
|
|
1487636084 |
@@ -0,0 +1,15 @@
|
|||||||
|
name: Build
|
||||||
|
|
||||||
|
on: [push]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: macOS-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
- name: Fastlane Action
|
||||||
|
uses: maierj/fastlane-action@v1.0.0
|
||||||
|
with:
|
||||||
|
lane: scan_project
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# Mac OS X
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Xcode
|
||||||
|
|
||||||
|
## Build generated
|
||||||
|
build/
|
||||||
|
DerivedData
|
||||||
|
|
||||||
|
## Various settings
|
||||||
|
*.pbxuser
|
||||||
|
!default.pbxuser
|
||||||
|
*.mode1v3
|
||||||
|
!default.mode1v3
|
||||||
|
*.mode2v3
|
||||||
|
!default.mode2v3
|
||||||
|
*.perspectivev3
|
||||||
|
!default.perspectivev3
|
||||||
|
xcuserdata
|
||||||
|
|
||||||
|
## Other
|
||||||
|
*.xccheckout
|
||||||
|
*.moved-aside
|
||||||
|
*.xcuserstate
|
||||||
|
*.xcscmblueprint
|
||||||
|
|
||||||
|
## Obj-C/Swift specific
|
||||||
|
*.hmap
|
||||||
|
*.ipa
|
||||||
|
|
||||||
|
## Playgrounds
|
||||||
|
timeline.xctimeline
|
||||||
|
playground.xcworkspace
|
||||||
|
|
||||||
|
# Swift Package Manager
|
||||||
|
.build/
|
||||||
|
|
||||||
|
# Carthage
|
||||||
|
Carthage/
|
||||||
|
|
||||||
|
# Cocoapods
|
||||||
|
Pods/
|
||||||
|
fastlane/report.xml
|
||||||
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
4.0
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "self:">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
||||||
@@ -1,6 +1,69 @@
|
|||||||
Changelog
|
Changelog
|
||||||
==========
|
==========
|
||||||
|
|
||||||
|
### 4.1.1
|
||||||
|
|
||||||
|
- Fix build
|
||||||
|
|
||||||
|
### 4.1.0
|
||||||
|
|
||||||
|
- Add SwiftUI support (thanks to doronkatz)
|
||||||
|
|
||||||
|
### 4.0.2
|
||||||
|
|
||||||
|
- Fix pod release
|
||||||
|
- Add Github workflow
|
||||||
|
|
||||||
|
### 4.0.1
|
||||||
|
|
||||||
|
- Fix SPM
|
||||||
|
|
||||||
|
### 4.0.0
|
||||||
|
|
||||||
|
- Swift 5.1
|
||||||
|
- Add Catalyst support
|
||||||
|
- Add SPM support
|
||||||
|
- Dark mode fix for background
|
||||||
|
- Layout fix for child controller and autolayout extension
|
||||||
|
|
||||||
|
### 3.2.1
|
||||||
|
|
||||||
|
- Swift 5
|
||||||
|
- Remove swift-version file
|
||||||
|
|
||||||
|
### 3.2.0
|
||||||
|
|
||||||
|
- Small refactoring
|
||||||
|
- Add fastlane for pods release
|
||||||
|
|
||||||
|
### 3.1.1
|
||||||
|
|
||||||
|
- Fix background color
|
||||||
|
|
||||||
|
### 3.1.0
|
||||||
|
|
||||||
|
- Code cleanup
|
||||||
|
|
||||||
|
### 3.0.0
|
||||||
|
|
||||||
|
- Swift 4.2
|
||||||
|
|
||||||
|
### 2.1.2
|
||||||
|
|
||||||
|
- Use DispatchGroup for download
|
||||||
|
|
||||||
|
### 2.1.1
|
||||||
|
|
||||||
|
- Hide close button when push the controller
|
||||||
|
|
||||||
|
### 2.1.0
|
||||||
|
|
||||||
|
- Add push transition with `pushOpenSourceController(from: self)`
|
||||||
|
|
||||||
|
### 2.0.1
|
||||||
|
|
||||||
|
- Clean code and move loader position
|
||||||
|
|
||||||
### 2.0
|
### 2.0
|
||||||
|
|
||||||
- Swift 4 version
|
- Swift 4 version
|
||||||
|
|||||||
@@ -6,4 +6,5 @@ Contributors to the codebase :
|
|||||||
| Name | Github handle | Mail |
|
| Name | Github handle | Mail |
|
||||||
| ------------- |------------- | ----- |
|
| ------------- |------------- | ----- |
|
||||||
| David Lari | DavidLari | / |
|
| David Lari | DavidLari | / |
|
||||||
|
| Doron Katz | | David Lari | DavidLari | / |
|
||||||
|
|
||||||
|
|||||||
@@ -7,21 +7,49 @@
|
|||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
7622F02C23796B67001B4F5D /* CHANGELOG.md in Resources */ = {isa = PBXBuildFile; fileRef = 7622F02B23796B67001B4F5D /* CHANGELOG.md */; };
|
||||||
|
7622F02E2379B559001B4F5D /* Style.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7622F02D2379B559001B4F5D /* Style.swift */; };
|
||||||
|
7627B06221807C4B0057FFBB /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 7627B06121807C4B0057FFBB /* README.md */; };
|
||||||
|
76D7F28121BEB3A0004B74CB /* OpenSourceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F26F21BEB3A0004B74CB /* OpenSourceController.swift */; };
|
||||||
|
76D7F28221BEB3A0004B74CB /* OpenSourceControllerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F27021BEB3A0004B74CB /* OpenSourceControllerConfig.swift */; };
|
||||||
|
76D7F28321BEB3A0004B74CB /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F27221BEB3A0004B74CB /* Array+Extensions.swift */; };
|
||||||
|
76D7F28421BEB3A0004B74CB /* UIViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F27321BEB3A0004B74CB /* UIViewController+Extensions.swift */; };
|
||||||
|
76D7F28521BEB3A0004B74CB /* UIView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F27421BEB3A0004B74CB /* UIView+Extensions.swift */; };
|
||||||
|
76D7F28621BEB3A0004B74CB /* Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F27521BEB3A0004B74CB /* Reusable.swift */; };
|
||||||
|
76D7F28721BEB3A0004B74CB /* UITableView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F27621BEB3A0004B74CB /* UITableView+Extensions.swift */; };
|
||||||
|
76D7F28821BEB3A0004B74CB /* OpenSourceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F27821BEB3A0004B74CB /* OpenSourceViewController.swift */; };
|
||||||
|
76D7F28921BEB3A0004B74CB /* LicenceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F27921BEB3A0004B74CB /* LicenceListViewController.swift */; };
|
||||||
|
76D7F28A21BEB3A0004B74CB /* OpenSourceTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F27A21BEB3A0004B74CB /* OpenSourceTableViewCell.swift */; };
|
||||||
|
76D7F28B21BEB3A0004B74CB /* LoadingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F27B21BEB3A0004B74CB /* LoadingViewController.swift */; };
|
||||||
|
76D7F28C21BEB3A0004B74CB /* HTTPDataLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F27D21BEB3A0004B74CB /* HTTPDataLoader.swift */; };
|
||||||
|
76D7F28D21BEB3A0004B74CB /* LicenceFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F27F21BEB3A0004B74CB /* LicenceFile.swift */; };
|
||||||
|
76D7F28E21BEB3A0004B74CB /* LicenceLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F28021BEB3A0004B74CB /* LicenceLoader.swift */; };
|
||||||
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 /* LicenceDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA88A1E93F675009A41DA /* LicenceDownloader.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 */; };
|
|
||||||
76EAA8941E93F681009A41DA /* OpenSourceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8921E93F681009A41DA /* OpenSourceController.swift */; };
|
|
||||||
76EAA8951E93F681009A41DA /* OpenSourceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8931E93F681009A41DA /* OpenSourceViewController.swift */; };
|
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
7622F02A23796A81001B4F5D /* OpenSourceControllerDemo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = OpenSourceControllerDemo.entitlements; sourceTree = "<group>"; };
|
||||||
|
7622F02B23796B67001B4F5D /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; name = CHANGELOG.md; path = ../CHANGELOG.md; sourceTree = "<group>"; };
|
||||||
|
7622F02D2379B559001B4F5D /* Style.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Style.swift; sourceTree = "<group>"; };
|
||||||
|
7627B06121807C4B0057FFBB /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = "<group>"; };
|
||||||
|
76D7F26F21BEB3A0004B74CB /* OpenSourceController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenSourceController.swift; sourceTree = "<group>"; };
|
||||||
|
76D7F27021BEB3A0004B74CB /* OpenSourceControllerConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenSourceControllerConfig.swift; sourceTree = "<group>"; };
|
||||||
|
76D7F27221BEB3A0004B74CB /* Array+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Array+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
|
76D7F27321BEB3A0004B74CB /* UIViewController+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
|
76D7F27421BEB3A0004B74CB /* UIView+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
|
76D7F27521BEB3A0004B74CB /* Reusable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Reusable.swift; sourceTree = "<group>"; };
|
||||||
|
76D7F27621BEB3A0004B74CB /* UITableView+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UITableView+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
|
76D7F27821BEB3A0004B74CB /* OpenSourceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenSourceViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76D7F27921BEB3A0004B74CB /* LicenceListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LicenceListViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76D7F27A21BEB3A0004B74CB /* OpenSourceTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenSourceTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
|
76D7F27B21BEB3A0004B74CB /* LoadingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadingViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76D7F27D21BEB3A0004B74CB /* HTTPDataLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPDataLoader.swift; sourceTree = "<group>"; };
|
||||||
|
76D7F27F21BEB3A0004B74CB /* LicenceFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LicenceFile.swift; sourceTree = "<group>"; };
|
||||||
|
76D7F28021BEB3A0004B74CB /* LicenceLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LicenceLoader.swift; 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>"; };
|
||||||
@@ -29,13 +57,6 @@
|
|||||||
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 /* 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>"; };
|
|
||||||
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>"; };
|
|
||||||
76EAA8921E93F681009A41DA /* OpenSourceController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceController.swift; path = ../../Sources/Controller/OpenSourceController.swift; sourceTree = "<group>"; };
|
|
||||||
76EAA8931E93F681009A41DA /* OpenSourceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceViewController.swift; path = ../../Sources/Controller/OpenSourceViewController.swift; sourceTree = "<group>"; };
|
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@@ -49,10 +70,68 @@
|
|||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
76D7F26E21BEB3A0004B74CB /* Sources */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76D7F26F21BEB3A0004B74CB /* OpenSourceController.swift */,
|
||||||
|
76D7F27021BEB3A0004B74CB /* OpenSourceControllerConfig.swift */,
|
||||||
|
76D7F27121BEB3A0004B74CB /* Utils */,
|
||||||
|
76D7F27721BEB3A0004B74CB /* Controller */,
|
||||||
|
76D7F27C21BEB3A0004B74CB /* Loader */,
|
||||||
|
76D7F27E21BEB3A0004B74CB /* Model */,
|
||||||
|
);
|
||||||
|
name = Sources;
|
||||||
|
path = ../Sources;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
76D7F27121BEB3A0004B74CB /* Utils */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76D7F27221BEB3A0004B74CB /* Array+Extensions.swift */,
|
||||||
|
76D7F27321BEB3A0004B74CB /* UIViewController+Extensions.swift */,
|
||||||
|
76D7F27421BEB3A0004B74CB /* UIView+Extensions.swift */,
|
||||||
|
76D7F27521BEB3A0004B74CB /* Reusable.swift */,
|
||||||
|
76D7F27621BEB3A0004B74CB /* UITableView+Extensions.swift */,
|
||||||
|
7622F02D2379B559001B4F5D /* Style.swift */,
|
||||||
|
);
|
||||||
|
path = Utils;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
76D7F27721BEB3A0004B74CB /* Controller */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76D7F27821BEB3A0004B74CB /* OpenSourceViewController.swift */,
|
||||||
|
76D7F27921BEB3A0004B74CB /* LicenceListViewController.swift */,
|
||||||
|
76D7F27A21BEB3A0004B74CB /* OpenSourceTableViewCell.swift */,
|
||||||
|
76D7F27B21BEB3A0004B74CB /* LoadingViewController.swift */,
|
||||||
|
);
|
||||||
|
path = Controller;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
76D7F27C21BEB3A0004B74CB /* Loader */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76D7F27D21BEB3A0004B74CB /* HTTPDataLoader.swift */,
|
||||||
|
76D7F28021BEB3A0004B74CB /* LicenceLoader.swift */,
|
||||||
|
);
|
||||||
|
path = Loader;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
76D7F27E21BEB3A0004B74CB /* Model */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76D7F27F21BEB3A0004B74CB /* LicenceFile.swift */,
|
||||||
|
);
|
||||||
|
path = Model;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
76EAA8581E93F2CC009A41DA = {
|
76EAA8581E93F2CC009A41DA = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
7627B06121807C4B0057FFBB /* README.md */,
|
||||||
|
7622F02B23796B67001B4F5D /* CHANGELOG.md */,
|
||||||
76EAA8631E93F2CC009A41DA /* OpenSourceControllerDemo */,
|
76EAA8631E93F2CC009A41DA /* OpenSourceControllerDemo */,
|
||||||
|
76D7F26E21BEB3A0004B74CB /* Sources */,
|
||||||
76EAA8621E93F2CC009A41DA /* Products */,
|
76EAA8621E93F2CC009A41DA /* Products */,
|
||||||
);
|
);
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -68,9 +147,9 @@
|
|||||||
76EAA8631E93F2CC009A41DA /* OpenSourceControllerDemo */ = {
|
76EAA8631E93F2CC009A41DA /* OpenSourceControllerDemo */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
7622F02A23796A81001B4F5D /* OpenSourceControllerDemo.entitlements */,
|
||||||
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 */,
|
||||||
@@ -79,20 +158,6 @@
|
|||||||
path = OpenSourceControllerDemo;
|
path = OpenSourceControllerDemo;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
76EAA8891E93F66A009A41DA /* Sources */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
76EAA8921E93F681009A41DA /* OpenSourceController.swift */,
|
|
||||||
76EAA8931E93F681009A41DA /* OpenSourceViewController.swift */,
|
|
||||||
76EAA8901E93F67B009A41DA /* Array+Extensions.swift */,
|
|
||||||
76EAA88A1E93F675009A41DA /* LicenceDownloader.swift */,
|
|
||||||
76EAA88B1E93F675009A41DA /* LicenceFile.swift */,
|
|
||||||
76EAA88C1E93F675009A41DA /* OpenSourceControllerConfig.swift */,
|
|
||||||
76EAA8871E93F666009A41DA /* OpenSourceTableViewCell.swift */,
|
|
||||||
);
|
|
||||||
name = Sources;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
@@ -120,20 +185,20 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 0830;
|
LastSwiftUpdateCheck = 0830;
|
||||||
LastUpgradeCheck = 0900;
|
LastUpgradeCheck = 1100;
|
||||||
ORGANIZATIONNAME = OpenSourceController;
|
ORGANIZATIONNAME = OpenSourceController;
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
76EAA8601E93F2CC009A41DA = {
|
76EAA8601E93F2CC009A41DA = {
|
||||||
CreatedOnToolsVersion = 8.3;
|
CreatedOnToolsVersion = 8.3;
|
||||||
DevelopmentTeam = 62PP362QNQ;
|
DevelopmentTeam = XEHEC9B46E;
|
||||||
LastSwiftMigration = 0900;
|
LastSwiftMigration = 1100;
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Automatic;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
buildConfigurationList = 76EAA85C1E93F2CC009A41DA /* Build configuration list for PBXProject "OpenSourceControllerDemo" */;
|
buildConfigurationList = 76EAA85C1E93F2CC009A41DA /* Build configuration list for PBXProject "OpenSourceControllerDemo" */;
|
||||||
compatibilityVersion = "Xcode 3.2";
|
compatibilityVersion = "Xcode 3.2";
|
||||||
developmentRegion = English;
|
developmentRegion = en;
|
||||||
hasScannedForEncodings = 0;
|
hasScannedForEncodings = 0;
|
||||||
knownRegions = (
|
knownRegions = (
|
||||||
en,
|
en,
|
||||||
@@ -155,7 +220,9 @@
|
|||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
76EAA86F1E93F2CC009A41DA /* LaunchScreen.storyboard in Resources */,
|
76EAA86F1E93F2CC009A41DA /* LaunchScreen.storyboard in Resources */,
|
||||||
|
7622F02C23796B67001B4F5D /* CHANGELOG.md 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 */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@@ -167,15 +234,23 @@
|
|||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
76EAA88D1E93F675009A41DA /* LicenceDownloader.swift in Sources */,
|
76D7F28721BEB3A0004B74CB /* UITableView+Extensions.swift in Sources */,
|
||||||
76EAA88E1E93F675009A41DA /* LicenceFile.swift in Sources */,
|
76D7F28521BEB3A0004B74CB /* UIView+Extensions.swift in Sources */,
|
||||||
76EAA8951E93F681009A41DA /* OpenSourceViewController.swift in Sources */,
|
76D7F28221BEB3A0004B74CB /* OpenSourceControllerConfig.swift in Sources */,
|
||||||
76EAA8881E93F666009A41DA /* OpenSourceTableViewCell.swift in Sources */,
|
76D7F28321BEB3A0004B74CB /* Array+Extensions.swift in Sources */,
|
||||||
76EAA8911E93F67B009A41DA /* Array+Extensions.swift in Sources */,
|
7622F02E2379B559001B4F5D /* Style.swift in Sources */,
|
||||||
76EAA8941E93F681009A41DA /* OpenSourceController.swift in Sources */,
|
|
||||||
76EAA8671E93F2CC009A41DA /* ViewController.swift in Sources */,
|
76EAA8671E93F2CC009A41DA /* ViewController.swift in Sources */,
|
||||||
76EAA88F1E93F675009A41DA /* OpenSourceControllerConfig.swift in Sources */,
|
76D7F28921BEB3A0004B74CB /* LicenceListViewController.swift in Sources */,
|
||||||
|
76D7F28C21BEB3A0004B74CB /* HTTPDataLoader.swift in Sources */,
|
||||||
|
76D7F28A21BEB3A0004B74CB /* OpenSourceTableViewCell.swift in Sources */,
|
||||||
|
76D7F28E21BEB3A0004B74CB /* LicenceLoader.swift in Sources */,
|
||||||
|
76D7F28821BEB3A0004B74CB /* OpenSourceViewController.swift in Sources */,
|
||||||
|
76D7F28621BEB3A0004B74CB /* Reusable.swift in Sources */,
|
||||||
76EAA8651E93F2CC009A41DA /* AppDelegate.swift in Sources */,
|
76EAA8651E93F2CC009A41DA /* AppDelegate.swift in Sources */,
|
||||||
|
76D7F28D21BEB3A0004B74CB /* LicenceFile.swift in Sources */,
|
||||||
|
76D7F28421BEB3A0004B74CB /* UIViewController+Extensions.swift in Sources */,
|
||||||
|
76D7F28B21BEB3A0004B74CB /* LoadingViewController.swift in Sources */,
|
||||||
|
76D7F28121BEB3A0004B74CB /* OpenSourceController.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -205,6 +280,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
@@ -215,6 +291,7 @@
|
|||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
CLANG_WARN_COMMA = YES;
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
@@ -222,6 +299,7 @@
|
|||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
@@ -263,6 +341,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
@@ -273,6 +352,7 @@
|
|||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
CLANG_WARN_COMMA = YES;
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
@@ -280,6 +360,7 @@
|
|||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
@@ -314,13 +395,15 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
DEVELOPMENT_TEAM = 62PP362QNQ;
|
CODE_SIGN_ENTITLEMENTS = OpenSourceControllerDemo/OpenSourceControllerDemo.entitlements;
|
||||||
|
DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = YES;
|
||||||
|
DEVELOPMENT_TEAM = XEHEC9B46E;
|
||||||
INFOPLIST_FILE = OpenSourceControllerDemo/Info.plist;
|
INFOPLIST_FILE = OpenSourceControllerDemo/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.fg.OpenSourceControllerDemo;
|
PRODUCT_BUNDLE_IDENTIFIER = com.fg.OpenSourceControllerDemo;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
|
SUPPORTS_MACCATALYST = YES;
|
||||||
SWIFT_VERSION = 4.0;
|
SWIFT_VERSION = 5.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -328,13 +411,15 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
DEVELOPMENT_TEAM = 62PP362QNQ;
|
CODE_SIGN_ENTITLEMENTS = OpenSourceControllerDemo/OpenSourceControllerDemo.entitlements;
|
||||||
|
DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = YES;
|
||||||
|
DEVELOPMENT_TEAM = XEHEC9B46E;
|
||||||
INFOPLIST_FILE = OpenSourceControllerDemo/Info.plist;
|
INFOPLIST_FILE = OpenSourceControllerDemo/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.fg.OpenSourceControllerDemo;
|
PRODUCT_BUNDLE_IDENTIFIER = com.fg.OpenSourceControllerDemo;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
|
SUPPORTS_MACCATALYST = YES;
|
||||||
SWIFT_VERSION = 4.0;
|
SWIFT_VERSION = 5.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>BuildSystemType</key>
|
||||||
|
<string>Latest</string>
|
||||||
|
<key>PreviewsEnabled</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>BuildLocationStyle</key>
|
||||||
|
<string>UseAppPreferences</string>
|
||||||
|
<key>CustomBuildLocationType</key>
|
||||||
|
<string>RelativeToDerivedData</string>
|
||||||
|
<key>DerivedDataLocationStyle</key>
|
||||||
|
<string>Default</string>
|
||||||
|
<key>EnabledFullIndexStoreVisibility</key>
|
||||||
|
<false/>
|
||||||
|
<key>IssueFilterStyle</key>
|
||||||
|
<string>ShowActiveSchemeOnly</string>
|
||||||
|
<key>LiveSourceIssuesEnabled</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>SchemeUserState</key>
|
||||||
|
<dict>
|
||||||
|
<key>OpenSourceControllerDemo.xcscheme</key>
|
||||||
|
<dict>
|
||||||
|
<key>orderHint</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0900"
|
LastUpgradeVersion = "1100"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -26,8 +26,16 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
language = ""
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "76EAA8601E93F2CC009A41DA"
|
||||||
|
BuildableName = "OpenSourceControllerDemo.app"
|
||||||
|
BlueprintName = "OpenSourceControllerDemo"
|
||||||
|
ReferencedContainer = "container:OpenSourceControllerDemo.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
<Testables>
|
<Testables>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
skipped = "NO">
|
skipped = "NO">
|
||||||
@@ -40,23 +48,11 @@
|
|||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</TestableReference>
|
</TestableReference>
|
||||||
</Testables>
|
</Testables>
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "76EAA8601E93F2CC009A41DA"
|
|
||||||
BuildableName = "OpenSourceControllerDemo.app"
|
|
||||||
BlueprintName = "OpenSourceControllerDemo"
|
|
||||||
ReferencedContainer = "container:OpenSourceControllerDemo.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
language = ""
|
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
@@ -73,8 +69,6 @@
|
|||||||
ReferencedContainer = "container:OpenSourceControllerDemo.xcodeproj">
|
ReferencedContainer = "container:OpenSourceControllerDemo.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</BuildableProductRunnable>
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
<ProfileAction
|
<ProfileAction
|
||||||
buildConfiguration = "Release"
|
buildConfiguration = "Release"
|
||||||
|
|||||||
@@ -13,8 +13,7 @@ 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: [UIApplicationLaunchOptionsKey: 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:.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,61 +3,61 @@
|
|||||||
{
|
{
|
||||||
"size" : "20x20",
|
"size" : "20x20",
|
||||||
"idiom" : "iphone",
|
"idiom" : "iphone",
|
||||||
"filename" : "logo 8-1.png",
|
"filename" : "logo 7-3 2 2-2.png",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "20x20",
|
"size" : "20x20",
|
||||||
"idiom" : "iphone",
|
"idiom" : "iphone",
|
||||||
"filename" : "logo 8.png",
|
"filename" : "logo 7-3 2 2-1.png",
|
||||||
"scale" : "3x"
|
"scale" : "3x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "29x29",
|
"size" : "29x29",
|
||||||
"idiom" : "iphone",
|
"idiom" : "iphone",
|
||||||
"filename" : "logo 9-1.png",
|
"filename" : "logo 7-3 2 2.png",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "29x29",
|
"size" : "29x29",
|
||||||
"idiom" : "iphone",
|
"idiom" : "iphone",
|
||||||
"filename" : "logo 9.png",
|
"filename" : "logo 7-3 2-4.png",
|
||||||
"scale" : "3x"
|
"scale" : "3x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "40x40",
|
"size" : "40x40",
|
||||||
"idiom" : "iphone",
|
"idiom" : "iphone",
|
||||||
"filename" : "logo 10-3.png",
|
"filename" : "logo 7-3 2-3.png",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "40x40",
|
"size" : "40x40",
|
||||||
"idiom" : "iphone",
|
"idiom" : "iphone",
|
||||||
"filename" : "logo 10-2.png",
|
"filename" : "logo 7-3 2-2.png",
|
||||||
"scale" : "3x"
|
"scale" : "3x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "60x60",
|
"size" : "60x60",
|
||||||
"idiom" : "iphone",
|
"idiom" : "iphone",
|
||||||
"filename" : "logo 10-1.png",
|
"filename" : "logo 7-3 2-1.png",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "60x60",
|
"size" : "60x60",
|
||||||
"idiom" : "iphone",
|
"idiom" : "iphone",
|
||||||
"filename" : "logo 10.png",
|
"filename" : "logo 7-3 2.png",
|
||||||
"scale" : "3x"
|
"scale" : "3x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "20x20",
|
"size" : "20x20",
|
||||||
"idiom" : "ipad",
|
"idiom" : "ipad",
|
||||||
"filename" : "logo 4-1.png",
|
"filename" : "logo 7-5.png",
|
||||||
"scale" : "1x"
|
"scale" : "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "20x20",
|
"size" : "20x20",
|
||||||
"idiom" : "ipad",
|
"idiom" : "ipad",
|
||||||
"filename" : "logo 4.png",
|
"filename" : "logo 7-4.png",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -103,8 +103,9 @@
|
|||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"idiom" : "ios-marketing",
|
|
||||||
"size" : "1024x1024",
|
"size" : "1024x1024",
|
||||||
|
"idiom" : "ios-marketing",
|
||||||
|
"filename" : "logo 7-3.png",
|
||||||
"scale" : "1x"
|
"scale" : "1x"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 287 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 6.2 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"version" : 1,
|
||||||
|
"author" : "xcode"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "logo 7-3 2 2 2-2.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "logo 7-3 2 2 2-1.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "logo 7-3 2 2 2.png",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"version" : 1,
|
||||||
|
"author" : "xcode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 259 KiB |
|
After Width: | Height: | Size: 259 KiB |
|
After Width: | Height: | Size: 259 KiB |
@@ -1,7 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11134" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||||
|
<device id="retina4_7" orientation="portrait">
|
||||||
|
<adaptation id="fullscreen"/>
|
||||||
|
</device>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11106"/>
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
|
||||||
<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>
|
||||||
@@ -16,7 +20,20 @@
|
|||||||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Logo" translatesAutoresizingMaskIntoConstraints="NO" id="AmH-DA-KFE">
|
||||||
|
<rect key="frame" x="87.5" y="233.5" width="200" height="200"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="200" id="TkH-v5-gZa"/>
|
||||||
|
<constraint firstAttribute="width" constant="200" id="b8V-t1-IPP"/>
|
||||||
|
</constraints>
|
||||||
|
</imageView>
|
||||||
|
</subviews>
|
||||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="AmH-DA-KFE" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="K8c-8t-pu8"/>
|
||||||
|
<constraint firstItem="AmH-DA-KFE" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="dMd-Ag-82A"/>
|
||||||
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
@@ -24,4 +41,7 @@
|
|||||||
<point key="canvasLocation" x="53" y="375"/>
|
<point key="canvasLocation" x="53" y="375"/>
|
||||||
</scene>
|
</scene>
|
||||||
</scenes>
|
</scenes>
|
||||||
|
<resources>
|
||||||
|
<image name="Logo" width="1024" height="1024"/>
|
||||||
|
</resources>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -1,16 +1,13 @@
|
|||||||
<?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="13196" 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="15505" 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" appearance="light"/>
|
||||||
<adaptation id="fullscreen"/>
|
|
||||||
</device>
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<deployment identifier="iOS"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13173"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15509"/>
|
||||||
<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>
|
||||||
<!--View Controller-->
|
<!--Demo-->
|
||||||
<scene sceneID="tne-QT-ifu">
|
<scene sceneID="tne-QT-ifu">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="OpenSourceControllerDemo" customModuleProvider="target" sceneMemberID="viewController">
|
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="OpenSourceControllerDemo" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
@@ -23,24 +20,61 @@
|
|||||||
<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 (push)">
|
||||||
|
<color key="titleColor" systemColor="labelColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
</state>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="showOpenSource:" destination="BYZ-38-t0r" eventType="touchUpInside" id="vmT-jj-Xvr"/>
|
<action selector="pushOpenSourceController:" destination="BYZ-38-t0r" eventType="touchUpInside" id="Exu-2l-lfA"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="wfq-WN-CRo">
|
||||||
|
<rect key="frame" x="23" y="356" width="329" height="30"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="30" id="LLB-12-8xE"/>
|
||||||
|
</constraints>
|
||||||
|
<state key="normal" title="Show me (present)">
|
||||||
|
<color key="titleColor" systemColor="labelColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
</state>
|
||||||
|
<connections>
|
||||||
|
<action selector="presentOpenSourceController:" destination="BYZ-38-t0r" eventType="touchUpInside" id="SoS-HF-0LZ"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||||
|
<color key="tintColor" red="0.0" green="0.58980089430000004" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
|
<constraint firstItem="wfq-WN-CRo" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" constant="7" id="7s5-n0-5gS"/>
|
||||||
|
<constraint firstAttribute="trailingMargin" secondItem="wfq-WN-CRo" secondAttribute="trailing" constant="7" id="Qvn-Hu-Pci"/>
|
||||||
<constraint firstItem="LI4-fC-2Ry" firstAttribute="centerY" secondItem="8bC-Xf-vdC" secondAttribute="centerY" id="jXk-ZK-0PF"/>
|
<constraint firstItem="LI4-fC-2Ry" firstAttribute="centerY" secondItem="8bC-Xf-vdC" secondAttribute="centerY" id="jXk-ZK-0PF"/>
|
||||||
|
<constraint firstItem="wfq-WN-CRo" firstAttribute="top" secondItem="LI4-fC-2Ry" secondAttribute="bottom" constant="7.5" id="ncu-07-cO6"/>
|
||||||
<constraint firstItem="LI4-fC-2Ry" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" constant="7" id="q0g-Cs-CVt"/>
|
<constraint firstItem="LI4-fC-2Ry" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" constant="7" id="q0g-Cs-CVt"/>
|
||||||
<constraint firstItem="LI4-fC-2Ry" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="wVV-oT-zRH"/>
|
<constraint firstItem="LI4-fC-2Ry" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="wVV-oT-zRH"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
|
<navigationItem key="navigationItem" title="Demo" id="0ga-4U-IeA"/>
|
||||||
</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="136.80000000000001" y="138.98050974512745"/>
|
<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="0.0" 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"/>
|
||||||
</scene>
|
</scene>
|
||||||
</scenes>
|
</scenes>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>com.apple.security.app-sandbox</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.network.client</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -14,23 +14,15 @@ class ViewController: UIViewController {
|
|||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
// Do any additional setup after loading the view, typically from a nib
|
|
||||||
}
|
|
||||||
|
|
||||||
override func didReceiveMemoryWarning() {
|
|
||||||
super.didReceiveMemoryWarning()
|
|
||||||
// Dispose of any resources that can be recreated.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Action
|
// MARK: - Action
|
||||||
|
|
||||||
/// Handle button click & show the controller with licences
|
private func buildOpenSourceController() -> OpenSourceController {
|
||||||
@IBAction func showOpenSource(_ sender: Any) {
|
|
||||||
// Create controller
|
|
||||||
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",
|
||||||
@@ -43,35 +35,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://fake.com/fake/LICENCE"),
|
||||||
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
|
return openSourceVC
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func pushOpenSourceController(_ sender: Any) {
|
||||||
|
let openSourceVC = self.buildOpenSourceController()
|
||||||
|
openSourceVC.pushOpenSourceController(from: self)
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func presentOpenSourceController(_ sender: Any) {
|
||||||
|
let openSourceVC = self.buildOpenSourceController()
|
||||||
openSourceVC.presentOpenSourceController(from: self)
|
openSourceVC.presentOpenSourceController(from: self)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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
|
|
||||||
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
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
Pod::Spec.new do |s|
|
Pod::Spec.new do |s|
|
||||||
s.name = 'OpenSourceController'
|
s.name = 'OpenSourceController'
|
||||||
s.version = '2.0'
|
s.version = '4.1.1'
|
||||||
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/terflogag/OpenSourceController'
|
s.homepage = 'https://github.com/floriangbh/OpenSourceController'
|
||||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||||
s.author = { 'Florian Gabach' => 'contact@floriangabach.fr' }
|
s.author = { 'Florian Gabach' => 'florian.gabach@gmail.com' }
|
||||||
s.source = { :git => 'https://github.com/terflogag/OpenSourceController.git', :tag => s.version.to_s }
|
s.source = { :git => 'https://github.com/floriangbh/OpenSourceController.git', :tag => s.version.to_s }
|
||||||
s.ios.deployment_target = '9.0'
|
s.ios.deployment_target = '9.0'
|
||||||
s.source_files = 'Sources/**/*'
|
s.source_files = 'Sources/**/*'
|
||||||
|
s.swift_versions = ['5.0']
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -8,13 +8,21 @@
|
|||||||
|
|
||||||
/* 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 */; };
|
76229B7D2180AD9F00A61697 /* HTTPDataLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B7C2180AD9F00A61697 /* HTTPDataLoader.swift */; };
|
||||||
76EAA8451E93EDA5009A41DA /* OpenSourceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8431E93EDA5009A41DA /* OpenSourceViewController.swift */; };
|
76229B802180ADA800A61697 /* OpenSourceControllerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B7E2180ADA800A61697 /* OpenSourceControllerConfig.swift */; };
|
||||||
76EAA8481E93EDB3009A41DA /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8471E93EDB3009A41DA /* Array+Extensions.swift */; };
|
76229B812180ADA800A61697 /* OpenSourceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B7F2180ADA800A61697 /* OpenSourceController.swift */; };
|
||||||
76EAA84E1E93EDCD009A41DA /* LicenceDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA84B1E93EDCD009A41DA /* LicenceDownloader.swift */; };
|
769FD9D121871DEC00FB5A53 /* OpenSourceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 769FD9CD21871DEC00FB5A53 /* OpenSourceViewController.swift */; };
|
||||||
|
769FD9D221871DEC00FB5A53 /* LicenceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 769FD9CE21871DEC00FB5A53 /* LicenceListViewController.swift */; };
|
||||||
|
769FD9D321871DEC00FB5A53 /* LoadingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 769FD9CF21871DEC00FB5A53 /* LoadingViewController.swift */; };
|
||||||
|
769FD9D421871DEC00FB5A53 /* OpenSourceTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 769FD9D021871DEC00FB5A53 /* OpenSourceTableViewCell.swift */; };
|
||||||
|
76B7980F238844F300009193 /* LicenceLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76B7980E238844F300009193 /* LicenceLoader.swift */; };
|
||||||
|
76B79811238845D300009193 /* Style.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76B79810238845D300009193 /* Style.swift */; };
|
||||||
|
76D7F24521BEB18A004B74CB /* UITableView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F24021BEB18A004B74CB /* UITableView+Extensions.swift */; };
|
||||||
|
76D7F24621BEB18A004B74CB /* Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F24121BEB18A004B74CB /* Reusable.swift */; };
|
||||||
|
76D7F24721BEB18A004B74CB /* UIViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F24221BEB18A004B74CB /* UIViewController+Extensions.swift */; };
|
||||||
|
76D7F24821BEB18A004B74CB /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F24321BEB18A004B74CB /* Array+Extensions.swift */; };
|
||||||
|
76D7F24921BEB18A004B74CB /* UIView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D7F24421BEB18A004B74CB /* UIView+Extensions.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 +38,21 @@
|
|||||||
/* 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>"; };
|
76229B7C2180AD9F00A61697 /* HTTPDataLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HTTPDataLoader.swift; path = Sources/Loader/HTTPDataLoader.swift; sourceTree = "<group>"; };
|
||||||
76EAA8431E93EDA5009A41DA /* OpenSourceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceViewController.swift; path = Sources/Controller/OpenSourceViewController.swift; sourceTree = "<group>"; };
|
76229B7E2180ADA800A61697 /* OpenSourceControllerConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceControllerConfig.swift; path = Sources/OpenSourceControllerConfig.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>"; };
|
76229B7F2180ADA800A61697 /* OpenSourceController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceController.swift; path = Sources/OpenSourceController.swift; sourceTree = "<group>"; };
|
||||||
76EAA84B1E93EDCD009A41DA /* LicenceDownloader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceDownloader.swift; path = Sources/Model/LicenceDownloader.swift; sourceTree = "<group>"; };
|
769FD9CD21871DEC00FB5A53 /* OpenSourceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceViewController.swift; path = Sources/Controller/OpenSourceViewController.swift; sourceTree = "<group>"; };
|
||||||
|
769FD9CE21871DEC00FB5A53 /* LicenceListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceListViewController.swift; path = Sources/Controller/LicenceListViewController.swift; sourceTree = "<group>"; };
|
||||||
|
769FD9CF21871DEC00FB5A53 /* LoadingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LoadingViewController.swift; path = Sources/Controller/LoadingViewController.swift; sourceTree = "<group>"; };
|
||||||
|
769FD9D021871DEC00FB5A53 /* OpenSourceTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceTableViewCell.swift; path = Sources/Controller/OpenSourceTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
|
76B7980E238844F300009193 /* LicenceLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceLoader.swift; path = Sources/Loader/LicenceLoader.swift; sourceTree = "<group>"; };
|
||||||
|
76B79810238845D300009193 /* Style.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Style.swift; path = Sources/Utils/Style.swift; sourceTree = "<group>"; };
|
||||||
|
76D7F24021BEB18A004B74CB /* UITableView+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UITableView+Extensions.swift"; path = "Sources/Utils/UITableView+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
|
76D7F24121BEB18A004B74CB /* Reusable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Reusable.swift; path = Sources/Utils/Reusable.swift; sourceTree = "<group>"; };
|
||||||
|
76D7F24221BEB18A004B74CB /* UIViewController+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIViewController+Extensions.swift"; path = "Sources/Utils/UIViewController+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
|
76D7F24321BEB18A004B74CB /* Array+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Array+Extensions.swift"; path = "Sources/Utils/Array+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
|
76D7F24421BEB18A004B74CB /* UIView+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIView+Extensions.swift"; path = "Sources/Utils/UIView+Extensions.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,50 +103,58 @@
|
|||||||
path = Configs;
|
path = Configs;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
76EAA8461E93EDA9009A41DA /* Controller */ = {
|
76229B702180AD7700A61697 /* Model */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
76EAA8421E93EDA5009A41DA /* OpenSourceController.swift */,
|
76EAA84C1E93EDCD009A41DA /* LicenceFile.swift */,
|
||||||
76EAA8431E93EDA5009A41DA /* OpenSourceViewController.swift */,
|
|
||||||
);
|
);
|
||||||
name = Controller;
|
name = Model;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
76EAA8491E93EDBB009A41DA /* Extensions */ = {
|
76229B7B2180AD8E00A61697 /* Loader */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
76EAA8471E93EDB3009A41DA /* Array+Extensions.swift */,
|
76229B7C2180AD9F00A61697 /* HTTPDataLoader.swift */,
|
||||||
|
76B7980E238844F300009193 /* LicenceLoader.swift */,
|
||||||
);
|
);
|
||||||
name = Extensions;
|
name = Loader;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
76EAA8491E93EDBB009A41DA /* Utils */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76D7F24321BEB18A004B74CB /* Array+Extensions.swift */,
|
||||||
|
76D7F24121BEB18A004B74CB /* Reusable.swift */,
|
||||||
|
76D7F24021BEB18A004B74CB /* UITableView+Extensions.swift */,
|
||||||
|
76D7F24421BEB18A004B74CB /* UIView+Extensions.swift */,
|
||||||
|
76B79810238845D300009193 /* Style.swift */,
|
||||||
|
76D7F24221BEB18A004B74CB /* UIViewController+Extensions.swift */,
|
||||||
|
);
|
||||||
|
name = Utils;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
76EAA84A1E93EDC0009A41DA /* Sources */ = {
|
76EAA84A1E93EDC0009A41DA /* Sources */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
76EAA8511E93EDD2009A41DA /* Model */,
|
76229B7F2180ADA800A61697 /* OpenSourceController.swift */,
|
||||||
76EAA8541E93EDF3009A41DA /* View */,
|
76229B7E2180ADA800A61697 /* OpenSourceControllerConfig.swift */,
|
||||||
76EAA8461E93EDA9009A41DA /* Controller */,
|
76229B7B2180AD8E00A61697 /* Loader */,
|
||||||
76EAA8491E93EDBB009A41DA /* Extensions */,
|
76229B702180AD7700A61697 /* Model */,
|
||||||
|
76EAA8511E93EDD2009A41DA /* Controller */,
|
||||||
|
76EAA8491E93EDBB009A41DA /* Utils */,
|
||||||
);
|
);
|
||||||
name = Sources;
|
name = Sources;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
76EAA8511E93EDD2009A41DA /* Model */ = {
|
76EAA8511E93EDD2009A41DA /* Controller */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
76EAA84B1E93EDCD009A41DA /* LicenceDownloader.swift */,
|
769FD9CE21871DEC00FB5A53 /* LicenceListViewController.swift */,
|
||||||
76EAA84C1E93EDCD009A41DA /* LicenceFile.swift */,
|
769FD9CF21871DEC00FB5A53 /* LoadingViewController.swift */,
|
||||||
76EAA84D1E93EDCD009A41DA /* OpenSourceControllerConfig.swift */,
|
769FD9D021871DEC00FB5A53 /* OpenSourceTableViewCell.swift */,
|
||||||
|
769FD9CD21871DEC00FB5A53 /* 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 */ = {
|
||||||
@@ -205,25 +229,29 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 0720;
|
LastSwiftUpdateCheck = 0720;
|
||||||
LastUpgradeCheck = 0900;
|
LastUpgradeCheck = 1100;
|
||||||
ORGANIZATIONNAME = OpenSourceController;
|
ORGANIZATIONNAME = OpenSourceController;
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
52D6D97B1BEFF229002C0205 = {
|
52D6D97B1BEFF229002C0205 = {
|
||||||
CreatedOnToolsVersion = 7.1;
|
CreatedOnToolsVersion = 7.1;
|
||||||
LastSwiftMigration = 0830;
|
DevelopmentTeam = XEHEC9B46E;
|
||||||
|
LastSwiftMigration = 1100;
|
||||||
|
ProvisioningStyle = Automatic;
|
||||||
};
|
};
|
||||||
52D6D9851BEFF229002C0205 = {
|
52D6D9851BEFF229002C0205 = {
|
||||||
CreatedOnToolsVersion = 7.1;
|
CreatedOnToolsVersion = 7.1;
|
||||||
LastSwiftMigration = "";
|
DevelopmentTeam = XEHEC9B46E;
|
||||||
|
LastSwiftMigration = 1130;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
buildConfigurationList = 52D6D9761BEFF229002C0205 /* Build configuration list for PBXProject "OpenSourceController" */;
|
buildConfigurationList = 52D6D9761BEFF229002C0205 /* Build configuration list for PBXProject "OpenSourceController" */;
|
||||||
compatibilityVersion = "Xcode 6.3";
|
compatibilityVersion = "Xcode 6.3";
|
||||||
developmentRegion = English;
|
developmentRegion = en;
|
||||||
hasScannedForEncodings = 0;
|
hasScannedForEncodings = 0;
|
||||||
knownRegions = (
|
knownRegions = (
|
||||||
en,
|
en,
|
||||||
|
Base,
|
||||||
);
|
);
|
||||||
mainGroup = 52D6D9721BEFF229002C0205;
|
mainGroup = 52D6D9721BEFF229002C0205;
|
||||||
productRefGroup = 52D6D97D1BEFF229002C0205 /* Products */;
|
productRefGroup = 52D6D97D1BEFF229002C0205 /* Products */;
|
||||||
@@ -258,13 +286,21 @@
|
|||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
76EAA84E1E93EDCD009A41DA /* LicenceDownloader.swift in Sources */,
|
76D7F24921BEB18A004B74CB /* UIView+Extensions.swift in Sources */,
|
||||||
|
76229B7D2180AD9F00A61697 /* HTTPDataLoader.swift in Sources */,
|
||||||
|
76D7F24621BEB18A004B74CB /* Reusable.swift in Sources */,
|
||||||
|
769FD9D221871DEC00FB5A53 /* LicenceListViewController.swift in Sources */,
|
||||||
|
76B79811238845D300009193 /* Style.swift in Sources */,
|
||||||
|
769FD9D121871DEC00FB5A53 /* OpenSourceViewController.swift in Sources */,
|
||||||
|
76D7F24721BEB18A004B74CB /* UIViewController+Extensions.swift in Sources */,
|
||||||
76EAA84F1E93EDCD009A41DA /* LicenceFile.swift in Sources */,
|
76EAA84F1E93EDCD009A41DA /* LicenceFile.swift in Sources */,
|
||||||
76EAA8441E93EDA5009A41DA /* OpenSourceController.swift in Sources */,
|
76D7F24521BEB18A004B74CB /* UITableView+Extensions.swift in Sources */,
|
||||||
76EAA8481E93EDB3009A41DA /* Array+Extensions.swift in Sources */,
|
769FD9D421871DEC00FB5A53 /* OpenSourceTableViewCell.swift in Sources */,
|
||||||
76EAA8531E93EDF0009A41DA /* OpenSourceTableViewCell.swift in Sources */,
|
76D7F24821BEB18A004B74CB /* Array+Extensions.swift in Sources */,
|
||||||
76EAA8501E93EDCD009A41DA /* OpenSourceControllerConfig.swift in Sources */,
|
76229B812180ADA800A61697 /* OpenSourceController.swift in Sources */,
|
||||||
76EAA8451E93EDA5009A41DA /* OpenSourceViewController.swift in Sources */,
|
769FD9D321871DEC00FB5A53 /* LoadingViewController.swift in Sources */,
|
||||||
|
76B7980F238844F300009193 /* LicenceLoader.swift in Sources */,
|
||||||
|
76229B802180ADA800A61697 /* OpenSourceControllerConfig.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -290,6 +326,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
@@ -298,12 +335,14 @@
|
|||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
CLANG_WARN_COMMA = YES;
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
@@ -347,6 +386,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
@@ -355,12 +395,14 @@
|
|||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
CLANG_WARN_COMMA = YES;
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
@@ -398,21 +440,25 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CODE_SIGN_IDENTITY = "";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
|
DEVELOPMENT_TEAM = XEHEC9B46E;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
INFOPLIST_FILE = Configs/OpenSourceController.plist;
|
INFOPLIST_FILE = Configs/OpenSourceController.plist;
|
||||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
ONLY_ACTIVE_ARCH = NO;
|
ONLY_ACTIVE_ARCH = NO;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.OpenSourceController.OpenSourceController-iOS";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.OpenSourceController.OpenSourceController-iOS";
|
||||||
PRODUCT_NAME = OpenSourceController;
|
PRODUCT_NAME = OpenSourceController;
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 4.0;
|
SWIFT_VERSION = 5.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -421,20 +467,24 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CODE_SIGN_IDENTITY = "";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
|
DEVELOPMENT_TEAM = XEHEC9B46E;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
INFOPLIST_FILE = Configs/OpenSourceController.plist;
|
INFOPLIST_FILE = Configs/OpenSourceController.plist;
|
||||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.OpenSourceController.OpenSourceController-iOS";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.OpenSourceController.OpenSourceController-iOS";
|
||||||
PRODUCT_NAME = OpenSourceController;
|
PRODUCT_NAME = OpenSourceController;
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||||
SWIFT_VERSION = 4.0;
|
SWIFT_VERSION = 5.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@@ -443,12 +493,13 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
DEVELOPMENT_TEAM = XEHEC9B46E;
|
||||||
INFOPLIST_FILE = Configs/OpenSourceControllerTests.plist;
|
INFOPLIST_FILE = Configs/OpenSourceControllerTests.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.OpenSourceController.OpenSourceController-iOS-Tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.OpenSourceController.OpenSourceController-iOS-Tests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_VERSION = 5.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -457,12 +508,13 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
DEVELOPMENT_TEAM = XEHEC9B46E;
|
||||||
INFOPLIST_FILE = Configs/OpenSourceControllerTests.plist;
|
INFOPLIST_FILE = Configs/OpenSourceControllerTests.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.OpenSourceController.OpenSourceController-iOS-Tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.OpenSourceController.OpenSourceController-iOS-Tests";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||||
SWIFT_VERSION = 3.0;
|
SWIFT_VERSION = 5.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict/>
|
||||||
|
</plist>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>BuildLocationStyle</key>
|
||||||
|
<string>UseAppPreferences</string>
|
||||||
|
<key>CustomBuildLocationType</key>
|
||||||
|
<string>RelativeToDerivedData</string>
|
||||||
|
<key>DerivedDataLocationStyle</key>
|
||||||
|
<string>Default</string>
|
||||||
|
<key>EnabledFullIndexStoreVisibility</key>
|
||||||
|
<false/>
|
||||||
|
<key>IssueFilterStyle</key>
|
||||||
|
<string>ShowActiveSchemeOnly</string>
|
||||||
|
<key>LiveSourceIssuesEnabled</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0900"
|
LastUpgradeVersion = "1100"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -26,9 +26,17 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
language = ""
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
codeCoverageEnabled = "YES">
|
codeCoverageEnabled = "YES">
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "52D6D97B1BEFF229002C0205"
|
||||||
|
BuildableName = "OpenSourceController.framework"
|
||||||
|
BlueprintName = "OpenSourceController-iOS"
|
||||||
|
ReferencedContainer = "container:OpenSourceController.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
<Testables>
|
<Testables>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
skipped = "NO">
|
skipped = "NO">
|
||||||
@@ -41,23 +49,11 @@
|
|||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</TestableReference>
|
</TestableReference>
|
||||||
</Testables>
|
</Testables>
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "52D6D97B1BEFF229002C0205"
|
|
||||||
BuildableName = "OpenSourceController.framework"
|
|
||||||
BlueprintName = "OpenSourceController-iOS"
|
|
||||||
ReferencedContainer = "container:OpenSourceController.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
language = ""
|
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
@@ -73,8 +69,6 @@
|
|||||||
ReferencedContainer = "container:OpenSourceController.xcodeproj">
|
ReferencedContainer = "container:OpenSourceController.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</MacroExpansion>
|
</MacroExpansion>
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
<ProfileAction
|
<ProfileAction
|
||||||
buildConfiguration = "Release"
|
buildConfiguration = "Release"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0900"
|
LastUpgradeVersion = "1100"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -26,9 +26,17 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
language = ""
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
codeCoverageEnabled = "YES">
|
codeCoverageEnabled = "YES">
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "52D6DA0E1BF000BD002C0205"
|
||||||
|
BuildableName = "OpenSourceController.framework"
|
||||||
|
BlueprintName = "OpenSourceController-macOS"
|
||||||
|
ReferencedContainer = "container:OpenSourceController.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
<Testables>
|
<Testables>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
skipped = "NO">
|
skipped = "NO">
|
||||||
@@ -41,23 +49,11 @@
|
|||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</TestableReference>
|
</TestableReference>
|
||||||
</Testables>
|
</Testables>
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "52D6DA0E1BF000BD002C0205"
|
|
||||||
BuildableName = "OpenSourceController.framework"
|
|
||||||
BlueprintName = "OpenSourceController-macOS"
|
|
||||||
ReferencedContainer = "container:OpenSourceController.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
language = ""
|
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
@@ -73,8 +69,6 @@
|
|||||||
ReferencedContainer = "container:OpenSourceController.xcodeproj">
|
ReferencedContainer = "container:OpenSourceController.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</MacroExpansion>
|
</MacroExpansion>
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
<ProfileAction
|
<ProfileAction
|
||||||
buildConfiguration = "Release"
|
buildConfiguration = "Release"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0900"
|
LastUpgradeVersion = "1100"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -26,9 +26,17 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
language = ""
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
codeCoverageEnabled = "YES">
|
codeCoverageEnabled = "YES">
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "52D6D9EF1BEFFFBE002C0205"
|
||||||
|
BuildableName = "OpenSourceController.framework"
|
||||||
|
BlueprintName = "OpenSourceController-tvOS"
|
||||||
|
ReferencedContainer = "container:OpenSourceController.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
<Testables>
|
<Testables>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
skipped = "NO">
|
skipped = "NO">
|
||||||
@@ -41,23 +49,11 @@
|
|||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</TestableReference>
|
</TestableReference>
|
||||||
</Testables>
|
</Testables>
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "52D6D9EF1BEFFFBE002C0205"
|
|
||||||
BuildableName = "OpenSourceController.framework"
|
|
||||||
BlueprintName = "OpenSourceController-tvOS"
|
|
||||||
ReferencedContainer = "container:OpenSourceController.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
language = ""
|
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
@@ -73,8 +69,6 @@
|
|||||||
ReferencedContainer = "container:OpenSourceController.xcodeproj">
|
ReferencedContainer = "container:OpenSourceController.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</MacroExpansion>
|
</MacroExpansion>
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
<ProfileAction
|
<ProfileAction
|
||||||
buildConfiguration = "Release"
|
buildConfiguration = "Release"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0900"
|
LastUpgradeVersion = "1100"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -26,19 +26,15 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
language = ""
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
codeCoverageEnabled = "YES">
|
codeCoverageEnabled = "YES">
|
||||||
<Testables>
|
<Testables>
|
||||||
</Testables>
|
</Testables>
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
language = ""
|
|
||||||
launchStyle = "0"
|
launchStyle = "0"
|
||||||
useCustomWorkingDirectory = "NO"
|
useCustomWorkingDirectory = "NO"
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
@@ -54,8 +50,6 @@
|
|||||||
ReferencedContainer = "container:OpenSourceController.xcodeproj">
|
ReferencedContainer = "container:OpenSourceController.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</MacroExpansion>
|
</MacroExpansion>
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
<ProfileAction
|
<ProfileAction
|
||||||
buildConfiguration = "Release"
|
buildConfiguration = "Release"
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
// swift-tools-version:5.1
|
||||||
|
import PackageDescription
|
||||||
|
|
||||||
|
let package = Package(
|
||||||
|
name: "OpenSourceController",
|
||||||
|
platforms: [.iOS(.v10)],
|
||||||
|
products: [
|
||||||
|
.library(name: "OpenSourceController", targets: ["OpenSourceController"])
|
||||||
|
],
|
||||||
|
targets: [
|
||||||
|
.target(
|
||||||
|
name: "OpenSourceController",
|
||||||
|
path: "",
|
||||||
|
sources: ["Sources"]
|
||||||
|
)
|
||||||
|
],
|
||||||
|
swiftLanguageVersions: [.v4, .v5]
|
||||||
|
)
|
||||||
@@ -10,10 +10,10 @@
|
|||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#features">Features</a>
|
<a href="#features">Features</a>
|
||||||
• <a href="#installation">Installation</a>
|
|
||||||
• <a href="#usage">Usage</a>
|
• <a href="#usage">Usage</a>
|
||||||
• <a href="#translation">Translation</a>
|
• <a href="#translation">Translation</a>
|
||||||
• <a href="#customisation">Customisation</a>
|
• <a href="#customisation">Customisation</a>
|
||||||
|
• <a href="#installation">Installation</a>
|
||||||
• <a href="#license">License</a>
|
• <a href="#license">License</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -28,36 +28,11 @@ Display a screen with all licences used in your application can be painful to ma
|
|||||||
- [x] Display tableView with licences used in your app
|
- [x] Display tableView with licences used in your app
|
||||||
- [x] Download licence from an URL
|
- [x] Download licence from an URL
|
||||||
|
|
||||||
## Todo (feel free to make PR)
|
|
||||||
|
|
||||||
- [ ] 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 local file
|
|
||||||
- [ ] Unit & UI Test
|
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
* Xcode 9
|
* Xcode 11
|
||||||
* iOS 9.0+ target deployment
|
* iOS 9.0+ target deployment
|
||||||
* Swift 3 or Swift 4 project
|
* Swift 3, Swift 4 or Swift 5.1 project
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
- To integrate OpenSourceController into your Xcode project using [CocoaPods](http://cocoapods.org), specify it in your Podfile :
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
pod "OpenSourceController", '~> 2.0'
|
|
||||||
|
|
||||||
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 :
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
github "terflogag/OpenSourceController" ~> 2.0
|
|
||||||
|
|
||||||
github "terflogag/OpenSourceController" ~> 1.0.8 # Swift 3.1 version
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@@ -81,6 +56,33 @@ url: "https://raw.githubusercontent.com/jessesquires/JSQMessagesViewController/d
|
|||||||
|
|
||||||
// Present controller
|
// Present controller
|
||||||
openSourceVC.presentOpenSourceController(from: self)
|
openSourceVC.presentOpenSourceController(from: self)
|
||||||
|
|
||||||
|
// OR push the controller if the source controller is embeded in navigation controller
|
||||||
|
openSourceVC.pushOpenSourceController(from: self)
|
||||||
|
```
|
||||||
|
|
||||||
|
With SwiftUI :
|
||||||
|
|
||||||
|
```swift
|
||||||
|
struct OpenSourceView: UIViewControllerRepresentable {
|
||||||
|
@available(iOS 13, *)
|
||||||
|
public func updateUIViewController(_ uiViewController: OpenSourceViewController, context: UIViewControllerRepresentableContext<OpenSourceView>) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
@available(iOS 13, *)
|
||||||
|
public func makeUIViewController(context: UIViewControllerRepresentableContext<OpenSourceView>) -> OpenSourceViewController {
|
||||||
|
let openSourceVC = OpenSourceViewController(licences:
|
||||||
|
[LicenceFile(title: "FacebookImagePicker",
|
||||||
|
url: "https://raw.githubusercontent.com/terflogag/FacebookImagePicker/master/LICENSE"),
|
||||||
|
LicenceFile(title: "JSQMessagesViewController",
|
||||||
|
url: "https://raw.githubusercontent.com/jessesquires/JSQMessagesViewController/develop/LICENSE")],
|
||||||
|
showCloseButton: true,
|
||||||
|
configuration: OpenSourceControllerConfig(),
|
||||||
|
licenceLoader: LicenceLoader())
|
||||||
|
return openSourceVC
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Customisation
|
## Customisation
|
||||||
@@ -91,9 +93,6 @@ You can apply some customisation. To do it you can use the OpenSourceControllerC
|
|||||||
// Navigation bar title
|
// Navigation bar title
|
||||||
openSourceVC.config.title = "MyCustomTitle"
|
openSourceVC.config.title = "MyCustomTitle"
|
||||||
|
|
||||||
// Navigation bar tint color
|
|
||||||
openSourceVC.config.uiConfig.barTintColor = UIColor.red
|
|
||||||
|
|
||||||
// Close button color
|
// Close button color
|
||||||
openSourceVC.config.uiConfig.closeButtonColor = UIColor.white
|
openSourceVC.config.uiConfig.closeButtonColor = UIColor.white
|
||||||
|
|
||||||
@@ -121,17 +120,33 @@ OpenSourceController is currently write in english. If you need translation for
|
|||||||
"Unable to load this licence." = "<your_translation>";
|
"Unable to load this licence." = "<your_translation>";
|
||||||
```
|
```
|
||||||
|
|
||||||
## Applications
|
## Installation
|
||||||
|
|
||||||
Some applications already use this controller like :
|
- To integrate OpenSourceController into your Xcode project using [Swift Packet Manager](https://github.com/apple/swift-package-manager), specify this url in Xcode : `https://github.com/floriangbh/OpenSourceController`
|
||||||
- [Troll Generator](https://itunes.apple.com/fr/app/troll-generator/id1038097542?mt=8)
|
|
||||||
- [Giraf](https://itunes.apple.com/fr/app/giraf/id1136592561?mt=8)
|
|
||||||
|
|
||||||
What about yours ? If your application also use this library, feel free to contact me or make pull request on the README 😁
|
- To integrate OpenSourceController into your Xcode project using [CocoaPods](http://cocoapods.org), specify it in your Podfile :
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
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
|
||||||
|
```
|
||||||
|
|
||||||
|
- To integrate OpenSourceController into your Xcode project using [Carthage](https://github.com/Carthage/Carthage), specify it in your Cartfile :
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
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
|
||||||
|
```
|
||||||
|
|
||||||
## Author
|
## Author
|
||||||
|
|
||||||
Florian Gabach, contact@floriangabach.fr
|
Florian Gabach, florian.gabach@gmail.com
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,75 @@
|
|||||||
|
//
|
||||||
|
// LicenceListViewController.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 23/10/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#if !os(macOS)
|
||||||
|
import UIKit
|
||||||
|
#else
|
||||||
|
import AppKit
|
||||||
|
#endif
|
||||||
|
|
||||||
|
open class LicenceListViewController: UITableViewController {
|
||||||
|
|
||||||
|
// MARK: - Var
|
||||||
|
|
||||||
|
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 public init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override open func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
self.prepareTableView()
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Prepare
|
||||||
|
|
||||||
|
fileprivate func prepareTableView() {
|
||||||
|
self.tableView.tableFooterView = UIView()
|
||||||
|
self.tableView.register(cellType: OpenSourceTableViewCell.self)
|
||||||
|
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 open func numberOfSections(in tableView: UITableView) -> Int {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
override open func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||||
|
return self.downloadedLicence.count
|
||||||
|
}
|
||||||
|
|
||||||
|
override open func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||||
|
let cell: OpenSourceTableViewCell = tableView.dequeueReusableCell(for: indexPath)
|
||||||
|
guard let licence = self.downloadedLicence.get(at: indexPath.row) else { return cell }
|
||||||
|
cell.configure(licence: licence, config: self.config)
|
||||||
|
return cell
|
||||||
|
}
|
||||||
|
|
||||||
|
override open func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
|
||||||
|
return UITableView.automaticDimension
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
//
|
||||||
|
// LoadingViewController.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 23/10/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
open class LoadingViewController: UIViewController {
|
||||||
|
|
||||||
|
// MARK: - Var
|
||||||
|
|
||||||
|
fileprivate lazy var activityIndicator: UIActivityIndicatorView = {
|
||||||
|
let activityIndicator = UIActivityIndicatorView()
|
||||||
|
if #available(iOS 13.0, *) {
|
||||||
|
activityIndicator.style = UIActivityIndicatorView.Style.medium
|
||||||
|
} else {
|
||||||
|
activityIndicator.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 public init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override open func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
self.view.backgroundColor = self.config.uiConfig.backgroundColor
|
||||||
|
|
||||||
|
self.view.addSubview(self.activityIndicator)
|
||||||
|
self.activityIndicator.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
self.activityIndicator.pinCenter(to: self.view)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
//
|
|
||||||
// OpenSourceController.swift
|
|
||||||
// Pods
|
|
||||||
//
|
|
||||||
// Created by Florian Gabach on 05/02/2017.
|
|
||||||
|
|
||||||
import UIKit
|
|
||||||
|
|
||||||
public class OpenSourceController: NSObject {
|
|
||||||
|
|
||||||
// Contains list of licence object
|
|
||||||
open var licences: [LicenceFile]?
|
|
||||||
|
|
||||||
// Configuration
|
|
||||||
open var config = OpenSourceControllerConfig()
|
|
||||||
|
|
||||||
/// Present OpenSourceViewController embbeded in navigation controller
|
|
||||||
///
|
|
||||||
/// - Parameter from: the source controller
|
|
||||||
open func presentOpenSourceController(from: UIViewController) {
|
|
||||||
// Create open source controller
|
|
||||||
let licenceController = OpenSourceViewController()
|
|
||||||
|
|
||||||
// Init licence
|
|
||||||
licenceController.licences = self.licences
|
|
||||||
|
|
||||||
// Init config
|
|
||||||
licenceController.config = self.config
|
|
||||||
|
|
||||||
// Embed in navigation controller
|
|
||||||
let navController = UINavigationController(rootViewController: licenceController)
|
|
||||||
|
|
||||||
// Present controller
|
|
||||||
from.present(navController, animated: true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
//
|
||||||
|
// OpenSourceTableViewCell.swift
|
||||||
|
// Pods
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 05/02/2017.
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
open class OpenSourceTableViewCell: UITableViewCell, Reusable {
|
||||||
|
|
||||||
|
// MARK: - Lifecycle
|
||||||
|
|
||||||
|
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||||||
|
super.init(style: .default, reuseIdentifier: reuseIdentifier)
|
||||||
|
self.prepareCellComponent()
|
||||||
|
}
|
||||||
|
|
||||||
|
required public init?(coder aDecoder: NSCoder) {
|
||||||
|
super.init(coder: aDecoder)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Prepare
|
||||||
|
|
||||||
|
func prepareCellComponent() {
|
||||||
|
self.textLabel?.numberOfLines = 0
|
||||||
|
self.accessoryType = .none
|
||||||
|
self.selectionStyle = .none
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Configure
|
||||||
|
|
||||||
|
func configure(licence: LicenceFile, config: OpenSourceControllerConfig) {
|
||||||
|
self.textLabel?.attributedText = licence.attributedContent
|
||||||
|
self.textLabel?.textColor = config.uiConfig.licenceTextColor
|
||||||
|
self.backgroundColor = config.uiConfig.licenceBackgroundColor
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,177 +6,86 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class OpenSourceViewController: UITableViewController {
|
open class OpenSourceViewController: UIViewController {
|
||||||
|
|
||||||
// MARK: - Var
|
// MARK: - Var
|
||||||
|
|
||||||
/// Loading indicator
|
fileprivate var showCloseButton: Bool
|
||||||
fileprivate var indicator = UIActivityIndicatorView()
|
|
||||||
|
|
||||||
/// TableViewCell identifier
|
fileprivate var licences: [LicenceFile]
|
||||||
private let reuseIdentifier = "openSourceCell"
|
|
||||||
|
|
||||||
/// Contains all licence object before downloaded
|
fileprivate var licenceLoader: LicenceLoader
|
||||||
internal var licences: [LicenceFile]?
|
|
||||||
|
|
||||||
// Controller configuration for customization
|
fileprivate var config: OpenSourceControllerConfig
|
||||||
internal var config = OpenSourceControllerConfig()
|
|
||||||
|
|
||||||
/// Contains all licences object after downloaded
|
fileprivate lazy var loadingController = {
|
||||||
fileprivate var downloadedLicence: [LicenceFile]? {
|
return LoadingViewController(configuration: config)
|
||||||
didSet {
|
}()
|
||||||
// Update UI
|
|
||||||
DispatchQueue.main.async { [weak self] in
|
fileprivate lazy var closeButton: UIBarButtonItem = {
|
||||||
self?.stopLoading()
|
let closeButton = UIBarButtonItem(barButtonSystemItem: .stop, target: self, action: #selector(self.closePicker))
|
||||||
self?.tableView.reloadData()
|
closeButton.tintColor = self.config.uiConfig.closeButtonColor
|
||||||
}
|
return closeButton
|
||||||
}
|
}()
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Lifecyle
|
// MARK: - Lifecyle
|
||||||
|
|
||||||
override func viewDidLoad() {
|
public init(licences: [LicenceFile],
|
||||||
super.viewDidLoad()
|
showCloseButton: Bool,
|
||||||
|
configuration: OpenSourceControllerConfig,
|
||||||
|
licenceLoader: LicenceLoader) {
|
||||||
|
|
||||||
// Prepare tableview
|
self.licenceLoader = licenceLoader
|
||||||
self.prepareTableView()
|
self.licences = licences
|
||||||
|
self.showCloseButton = showCloseButton
|
||||||
// Download licences
|
self.config = configuration
|
||||||
self.prepareLicences()
|
super.init(nibName: nil, bundle: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
override func didReceiveMemoryWarning() {
|
required public init?(coder aDecoder: NSCoder) {
|
||||||
super.didReceiveMemoryWarning()
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override open func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
self.title = self.config.title
|
||||||
|
|
||||||
|
self.view.backgroundColor = self.config.uiConfig.backgroundColor
|
||||||
|
|
||||||
|
self.prepareCloseButton()
|
||||||
|
self.prepareStyle()
|
||||||
|
|
||||||
|
self.add(self.loadingController)
|
||||||
|
self.prepareLicences()
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Prepare
|
// MARK: - Prepare
|
||||||
|
|
||||||
/// Download licences
|
fileprivate func prepareStyle() {
|
||||||
fileprivate func prepareLicences() {
|
let titleColor = self.config.uiConfig.titleColor
|
||||||
if let licences = self.licences {
|
let attribut = [NSAttributedString.Key.foregroundColor: titleColor]
|
||||||
self.startLoading()
|
|
||||||
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
|
|
||||||
if let backgroundColor = self.config.uiConfig.backgroundColor {
|
|
||||||
self.tableView.backgroundColor = backgroundColor
|
|
||||||
}
|
|
||||||
|
|
||||||
// Navigation bar
|
|
||||||
if let tintColor = self.config.uiConfig.barTintColor {
|
|
||||||
self.navigationController?.navigationBar.barTintColor = tintColor
|
|
||||||
}
|
|
||||||
if let textColor = self.config.uiConfig.titleColor {
|
|
||||||
let attribut = [NSAttributedStringKey.foregroundColor: textColor]
|
|
||||||
self.navigationController?.navigationBar.titleTextAttributes = attribut
|
self.navigationController?.navigationBar.titleTextAttributes = attribut
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close button (on the right corner of navigation bar)
|
fileprivate func prepareLicences() {
|
||||||
let closeButton = UIBarButtonItem(barButtonSystemItem: .stop,
|
self.licenceLoader.downloadLicences(licences: licences, config: config) { [weak self] in
|
||||||
target: self,
|
guard let strongSelf = self else { return }
|
||||||
action: #selector(self.closePicker))
|
let listController = LicenceListViewController(downloadedLicence: strongSelf.licences, config: strongSelf.config)
|
||||||
closeButton.tintColor = config.uiConfig.closeButtonColor ?? UIColor.black
|
strongSelf.loadingController.remove()
|
||||||
|
strongSelf.add(listController)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate func prepareCloseButton() {
|
||||||
|
if showCloseButton {
|
||||||
self.navigationItem.rightBarButtonItem = closeButton
|
self.navigationItem.rightBarButtonItem = closeButton
|
||||||
|
|
||||||
// Loading indicator
|
|
||||||
self.prepareActivityIndicator()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Loading indicator
|
|
||||||
|
|
||||||
/// Prepare UIActivityIndicatorView and display it at the center of the view
|
|
||||||
fileprivate func prepareActivityIndicator() {
|
|
||||||
self.indicator = UIActivityIndicatorView(frame:CGRect(x: 0,
|
|
||||||
y: 0,
|
|
||||||
width: 40,
|
|
||||||
height: 40) )
|
|
||||||
self.indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
|
|
||||||
self.indicator.center = self.view.center
|
|
||||||
self.indicator.hidesWhenStopped = true
|
|
||||||
self.indicator.backgroundColor = UIColor.clear
|
|
||||||
self.indicator.color = UIColor.black
|
|
||||||
self.view.addSubview(indicator)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// 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: UITableViewCellStyle.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 UITableViewAutomaticDimension
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Action
|
// MARK: - Action
|
||||||
|
|
||||||
/// Handler for click on close button
|
|
||||||
@objc fileprivate func closePicker() {
|
@objc fileprivate func closePicker() {
|
||||||
self.dismissController()
|
self.dismiss(animated: true, completion: nil)
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Navigation
|
|
||||||
|
|
||||||
/// Dismiss the OpenSourceController
|
|
||||||
func dismissController() {
|
|
||||||
DispatchQueue.main.async { [weak self] in
|
|
||||||
self?.dismiss(animated: true, completion: nil)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
//
|
||||||
|
// LicenceHTTPLoader.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 24/10/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
open 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,32 +6,32 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class LicenceDownloader: NSObject {
|
open class LicenceLoader {
|
||||||
|
|
||||||
/// Download every licence
|
/// Download every licence
|
||||||
///
|
///
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - licences: array which contains licence model model
|
/// - licences: array which contains licence model model
|
||||||
/// - completion: end downloading completion
|
/// - completion: end downloading completion
|
||||||
class func downloadLicences(licences: [LicenceFile],
|
func downloadLicences(licences: [LicenceFile],
|
||||||
config: OpenSourceControllerConfig,
|
config: OpenSourceControllerConfig,
|
||||||
completion: @escaping () -> Void) {
|
completion: @escaping () -> Void) {
|
||||||
// Number of licences
|
let licenceGroupe = DispatchGroup()
|
||||||
let licenceCount = licences.count
|
|
||||||
|
|
||||||
// Already licence downloaded
|
|
||||||
var alreadyDownloaded = 0
|
|
||||||
|
|
||||||
// Download licence's detail for every lience
|
// Download licence's detail for every lience
|
||||||
for licence in licences {
|
for licence in licences {
|
||||||
licence.downloadLicenceDetail(config: config, completion: { () in
|
licenceGroupe.enter()
|
||||||
alreadyDownloaded += 1
|
|
||||||
|
|
||||||
// If this is the last licence, perfom completion
|
licence.downloadLicenceDetail(config: config, completion: { () in
|
||||||
if licenceCount == alreadyDownloaded {
|
licenceGroupe.leave()
|
||||||
completion()
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// When everything is downloaded
|
||||||
|
licenceGroupe.notify(queue: .main) {
|
||||||
|
completion()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
public class LicenceFile: NSObject {
|
open class LicenceFile {
|
||||||
|
|
||||||
// MARK- Var
|
// MARK- Var
|
||||||
|
|
||||||
@@ -19,6 +19,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
|
||||||
|
|
||||||
/// Licence initializer
|
/// Licence initializer
|
||||||
@@ -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) {
|
|
||||||
|
|
||||||
// Update licence model
|
|
||||||
self.detail = html
|
self.detail = html
|
||||||
|
|
||||||
// Log
|
|
||||||
if config.verbose {
|
|
||||||
print("Licence for \(self.title ?? "") downloaded with success.")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
completion()
|
completion()
|
||||||
}
|
}
|
||||||
task.resume()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
//
|
||||||
|
// OpenSourceController.swift
|
||||||
|
// Pods
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 05/02/2017.
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
#if canImport(SwiftUI)
|
||||||
|
import SwiftUI
|
||||||
|
#endif
|
||||||
|
|
||||||
|
open class OpenSourceController: NSObject {
|
||||||
|
|
||||||
|
// Contains list of licence object
|
||||||
|
open var licences: [LicenceFile] = []
|
||||||
|
|
||||||
|
// Open source controller Configuration object
|
||||||
|
open var config = OpenSourceControllerConfig()
|
||||||
|
|
||||||
|
/// Present OpenSourceViewController embbeded in navigation controller
|
||||||
|
///
|
||||||
|
/// - Parameter from: the source controller
|
||||||
|
open func presentOpenSourceController(from: UIViewController) {
|
||||||
|
let loader: LicenceLoader = LicenceLoader()
|
||||||
|
let licenceController = OpenSourceViewController(licences: licences,
|
||||||
|
showCloseButton: true,
|
||||||
|
configuration: config,
|
||||||
|
licenceLoader: loader)
|
||||||
|
let navController = UINavigationController(rootViewController: licenceController)
|
||||||
|
from.present(navController, animated: true)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Push OpenSourceViewController from navigation controller
|
||||||
|
///
|
||||||
|
/// - Parameter from: the source controller
|
||||||
|
open func pushOpenSourceController(from: UIViewController) {
|
||||||
|
let loader: LicenceLoader = LicenceLoader()
|
||||||
|
let licenceController = OpenSourceViewController(licences: licences,
|
||||||
|
showCloseButton: false,
|
||||||
|
configuration: config,
|
||||||
|
licenceLoader: loader)
|
||||||
|
guard let navigationController = from.navigationController else {
|
||||||
|
assertionFailure("Source controller isn't embeded in navigation controller. Can't push.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
navigationController.pushViewController(licenceController, animated: true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -11,31 +11,32 @@ public struct OpenSourceControllerConfig {
|
|||||||
|
|
||||||
/// Sub-stuct holding configuration relevant to UI presentation !
|
/// Sub-stuct holding configuration relevant to UI presentation !
|
||||||
public struct UIConfig {
|
public struct UIConfig {
|
||||||
/// Will be applied to the navigation bar
|
|
||||||
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 = Style.background
|
||||||
|
|
||||||
/// Will be applied to licence text
|
/// Will be applied to licence text
|
||||||
public var licenceBackgroundColor: UIColor?
|
public var licenceBackgroundColor: UIColor = Style.background
|
||||||
|
|
||||||
/// Will be applied to the navigation bar
|
/// Will be applied to the navigation bar
|
||||||
public var closeButtonColor: UIColor?
|
public var closeButtonColor: UIColor = Style.label
|
||||||
|
|
||||||
/// Will be applied to licence text
|
/// Will be applied to licence text
|
||||||
public var licenceTextColor: UIColor?
|
public var licenceTextColor: UIColor = Style.label
|
||||||
|
|
||||||
/// Will be applied to licence text
|
/// Will be applied to licence text
|
||||||
public var titleColor: UIColor?
|
public var titleColor: UIColor = Style.label
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Will be applied to the navigation bar title
|
/// Will be applied to the navigation bar title
|
||||||
public var title: String = "Tiers library"
|
public var title: String = "Tiers library"
|
||||||
|
|
||||||
// Verbose mode for print log when licence are downloaded
|
/// Verbose mode for print log when licence are downloaded
|
||||||
public var verbose: Bool = false
|
public var verbose: Bool = false
|
||||||
|
|
||||||
/// UI-specific configuration.
|
/// UI-specific configuration.
|
||||||
|
|
||||||
|
public init() {
|
||||||
|
}
|
||||||
public var uiConfig = UIConfig()
|
public var uiConfig = UIConfig()
|
||||||
}
|
}
|
||||||
@@ -8,13 +8,13 @@ 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,19 @@
|
|||||||
|
//
|
||||||
|
// Reusable.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 10/12/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
public protocol Reusable: class {
|
||||||
|
static var reuseIdentifier: String { get }
|
||||||
|
}
|
||||||
|
|
||||||
|
public extension Reusable {
|
||||||
|
static var reuseIdentifier: String {
|
||||||
|
return String(describing: self)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// UIColor+Extension.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 11/11/2019.
|
||||||
|
// Copyright © 2019 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
struct Style {
|
||||||
|
static var background: UIColor {
|
||||||
|
if #available(iOS 13.0, *) {
|
||||||
|
return UIColor.systemBackground
|
||||||
|
} else {
|
||||||
|
return UIColor.black
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static var label: UIColor {
|
||||||
|
if #available(iOS 13.0, *) {
|
||||||
|
return UIColor.label
|
||||||
|
} else {
|
||||||
|
return UIColor.black
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
//
|
||||||
|
// UITableView+Extensions.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 10/12/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UITableView {
|
||||||
|
open func register<T: UITableViewCell>(cellType: T.Type)
|
||||||
|
where T: Reusable {
|
||||||
|
self.register(cellType.self, forCellReuseIdentifier: cellType.reuseIdentifier)
|
||||||
|
}
|
||||||
|
|
||||||
|
open func dequeueReusableCell<T: UITableViewCell>(for indexPath: IndexPath, cellType: T.Type = T.self) -> T
|
||||||
|
where T: Reusable {
|
||||||
|
guard let cell = self.dequeueReusableCell(withIdentifier: cellType.reuseIdentifier, for: indexPath) as? T else {
|
||||||
|
fatalError(
|
||||||
|
"Failed to dequeue a cell with identifier \(cellType.reuseIdentifier) matching type \(cellType.self). "
|
||||||
|
+ "Check that the reuseIdentifier is set properly in your XIB/Storyboard "
|
||||||
|
+ "and that you registered the cell beforehand"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return cell
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
//
|
||||||
|
// 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.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.centerXAnchor.constraint(equalTo: other.centerXAnchor).isActive = true
|
||||||
|
self.centerYAnchor.constraint(equalTo: other.centerYAnchor).isActive = true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
//
|
||||||
|
// 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)
|
||||||
|
view.pinEdges(to: child.view)
|
||||||
|
child.didMove(toParent: self)
|
||||||
|
}
|
||||||
|
|
||||||
|
func remove() {
|
||||||
|
guard parent != nil else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.willMove(toParent: nil)
|
||||||
|
self.removeFromParent()
|
||||||
|
self.view.removeFromSuperview()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
//
|
|
||||||
// OpenSourceTableViewCell.swift
|
|
||||||
// Pods
|
|
||||||
//
|
|
||||||
// Created by Florian Gabach on 05/02/2017.
|
|
||||||
|
|
||||||
import UIKit
|
|
||||||
|
|
||||||
class OpenSourceTableViewCell: UITableViewCell {
|
|
||||||
|
|
||||||
// MARK: - Lifecycle
|
|
||||||
|
|
||||||
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
|
|
||||||
super.init(style: .default,
|
|
||||||
reuseIdentifier: reuseIdentifier)
|
|
||||||
|
|
||||||
// Prepare cell
|
|
||||||
self.prepareCellComponent()
|
|
||||||
}
|
|
||||||
|
|
||||||
required init?(coder aDecoder: NSCoder) {
|
|
||||||
super.init(coder: aDecoder)
|
|
||||||
}
|
|
||||||
|
|
||||||
override func setSelected(_ selected: Bool, animated: Bool) {
|
|
||||||
super.setSelected(selected, animated: animated)
|
|
||||||
}
|
|
||||||
|
|
||||||
override func layoutSubviews() {
|
|
||||||
super.layoutSubviews()
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Prepare
|
|
||||||
|
|
||||||
func prepareCellComponent() {
|
|
||||||
// Text
|
|
||||||
self.textLabel?.numberOfLines = 0
|
|
||||||
|
|
||||||
// Common init
|
|
||||||
self.accessoryType = .none
|
|
||||||
self.selectionStyle = .none
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Configure
|
|
||||||
|
|
||||||
/// Initialize the cell content with Licence model
|
|
||||||
///
|
|
||||||
/// - Parameter licence: the licence model
|
|
||||||
func configure(licence: LicenceFile, config: OpenSourceControllerConfig) {
|
|
||||||
|
|
||||||
// Build attributed text
|
|
||||||
let libraryTitleAttribut = [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: UIFont.systemFontSize + 2)]
|
|
||||||
let libraryLicenceAttribut = [NSAttributedStringKey.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
|
|
||||||
self.textLabel?.attributedText = libraryTitle
|
|
||||||
self.textLabel?.textColor = config.uiConfig.licenceTextColor
|
|
||||||
|
|
||||||
// Background
|
|
||||||
if let backgroundColor = config.uiConfig.licenceBackgroundColor {
|
|
||||||
self.backgroundColor = backgroundColor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app
|
||||||
|
# apple_id("[[APPLE_ID]]") # Your Apple email address
|
||||||
|
|
||||||
|
|
||||||
|
# For more information about the Appfile, see:
|
||||||
|
# https://docs.fastlane.tools/advanced/#appfile
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# Usage : bundle exec fastlane ios (patch | minor | major)
|
||||||
|
|
||||||
|
default_platform(:ios)
|
||||||
|
|
||||||
|
platform :ios do
|
||||||
|
desc "Release a new version with a patch bump_type"
|
||||||
|
lane :patch do
|
||||||
|
release("patch")
|
||||||
|
end
|
||||||
|
|
||||||
|
desc "Release a new version with a minor bump_type"
|
||||||
|
lane :minor do
|
||||||
|
release("minor")
|
||||||
|
end
|
||||||
|
|
||||||
|
desc "Release a new version with a major bump_type"
|
||||||
|
lane :major do
|
||||||
|
release("major")
|
||||||
|
end
|
||||||
|
|
||||||
|
desc "Scan the project"
|
||||||
|
lane :scan_project do
|
||||||
|
scan(scheme: "OpenSourceController-iOS")
|
||||||
|
end
|
||||||
|
|
||||||
|
def release(type)
|
||||||
|
podspec_name = "OpenSourceController.podspec"
|
||||||
|
pod_lib_lint(use_bundle_exec: false)
|
||||||
|
version = version_bump_podspec(path: podspec_name, bump_type: type)
|
||||||
|
git_add(path: podspec_name)
|
||||||
|
git_commit(path: [podspec_name], message: "#{version} release")
|
||||||
|
add_git_tag(tag: "#{version}")
|
||||||
|
push_to_git_remote
|
||||||
|
pod_push(use_bundle_exec: false)
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
fastlane documentation
|
||||||
|
================
|
||||||
|
# Installation
|
||||||
|
|
||||||
|
Make sure you have the latest version of the Xcode command line tools installed:
|
||||||
|
|
||||||
|
```
|
||||||
|
xcode-select --install
|
||||||
|
```
|
||||||
|
|
||||||
|
Install _fastlane_ using
|
||||||
|
```
|
||||||
|
[sudo] gem install fastlane -NV
|
||||||
|
```
|
||||||
|
or alternatively using `brew cask install fastlane`
|
||||||
|
|
||||||
|
# Available Actions
|
||||||
|
## iOS
|
||||||
|
### ios patch
|
||||||
|
```
|
||||||
|
fastlane ios patch
|
||||||
|
```
|
||||||
|
Release a new version with a patch bump_type
|
||||||
|
### ios minor
|
||||||
|
```
|
||||||
|
fastlane ios minor
|
||||||
|
```
|
||||||
|
Release a new version with a minor bump_type
|
||||||
|
### ios major
|
||||||
|
```
|
||||||
|
fastlane ios major
|
||||||
|
```
|
||||||
|
Release a new version with a major bump_type
|
||||||
|
### ios buildproject
|
||||||
|
```
|
||||||
|
fastlane ios buildproject
|
||||||
|
```
|
||||||
|
Build the project
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run.
|
||||||
|
More information about fastlane can be found on [fastlane.tools](https://fastlane.tools).
|
||||||
|
The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
|
||||||
@@ -0,0 +1,126 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>Test Results | xcpretty</title>
|
||||||
|
<style type="text/css">
|
||||||
|
body { font-family:Avenir Next, Helvetica Neue, sans-serif; color: #4A4A4A; background-color: #F0F3FB; margin:0;}
|
||||||
|
h1 { font-weight: normal; font-size: 24px; margin: 10px 0 0 0;}
|
||||||
|
h3 { font-weight: normal; margin: 2px; font-size: 1.1em;}
|
||||||
|
header { position: fixed;width: 100%;background: rgba(249, 254, 255, 0.9);margin: 0;padding: 10px;}
|
||||||
|
header:before, header:after { content:""; display:table;}
|
||||||
|
header:after { clear:both;}
|
||||||
|
a:link { color: #A1D761;}
|
||||||
|
footer { clear: both;position: relative;z-index: 10;height: 40px;margin-top: -10px; margin-left:30px; font-size:12px;}
|
||||||
|
table { width:100%; border-collapse: collapse;}
|
||||||
|
tr td:first-child { width:7%}
|
||||||
|
.left { float: left; margin-left:30px;}
|
||||||
|
.right { float: right; margin-right: 40px; margin-top: 0; margin-bottom:0;}
|
||||||
|
.test-suite { margin: 0 0 30px 0;}
|
||||||
|
.test-suite > .heading { font-family:Menlo, Monaco, monospace; font-weight: bold; border-color: #A1D761; background-color: #B8E986; border-width: 1px;}
|
||||||
|
.test-suite.failing > .heading { border-color: #C84F5E; background-color: #E58591;}
|
||||||
|
.test-suite > .heading > .title { margin-top: 4px; margin-left: 10px;}
|
||||||
|
.tests { overflow: scroll;margin: 0 30px 0 60px;}
|
||||||
|
.test, .test-suite > .heading { height: 30px; overflow: hidden; margin: 0 30px;}
|
||||||
|
.test, .test-suite > .heading { border-width: 1px; border-collapse: collapse; border-style: solid; }
|
||||||
|
.test { margin-left: 30px; border-top:none;}
|
||||||
|
.test.failing { border-color: #C84F5E; background-color: #F4DDE0;}
|
||||||
|
.test.passing { border-color: #A1D761;}
|
||||||
|
.test.failing { background-color: #E7A1AA;}
|
||||||
|
.test.passing { background-color: #CAF59F;}
|
||||||
|
.test.failing.odd { background-color: #EEC7CC;}
|
||||||
|
.test.passing.odd { background-color: #E5FBCF;}
|
||||||
|
.details.failing { background-color: #F4DDE0; border: 1px solid #C84F5E;}
|
||||||
|
.details.passing { background-color: #E5F4DC; border: 1px solid #A1D761;}
|
||||||
|
.test .test-detail:last-child { padding-bottom: 8px;}
|
||||||
|
.test .title { float: left; font-size: 0.9em; margin-top: 8px; font-family: Menlo, Monaco, monospace;}
|
||||||
|
.test .time { float: left;margin: 4px 10px 0 20px;}
|
||||||
|
.test-detail { font-family:Menlo, Monaco, monospace; font-size: 0.9em; margin: 5px 0 5px 0px;}
|
||||||
|
.screenshots { height: auto; overflow: hidden; padding: 4px 4px 0 4px; background-color: #B8E986; border: #A1D761; border-width: 0 1px; border-style: solid; }
|
||||||
|
.screenshots.failing { border-color: #C84F5E; background-color: #E58591; }
|
||||||
|
.screenshot { max-height: 60px; float: left; transition: max-height 0.2s; margin: 0 4px 4px 0 }
|
||||||
|
.screenshot.selected { max-height: 568px; }
|
||||||
|
#test-suites { display: inline-block; width: 100%;margin-top:100px;}
|
||||||
|
#segment-bar { margin-top: 10px;margin-left: 14px;float:right;}
|
||||||
|
#segment-bar a:first-child { border-radius: 9px 0 0 9px; border-right: none;}
|
||||||
|
#segment-bar a:last-child { border-radius: 0 9px 9px 0; border-left: none;}
|
||||||
|
#segment-bar > a { color: #565656; border: 2px solid #7B7B7B; width: 80px; font-weight: bold; display:inline-block;text-align:center; font-weight: normal;}
|
||||||
|
#segment-bar > a.selected { background-color: #979797; color: #F0F3FB;}
|
||||||
|
#counters { float: left;margin: 10px;text-align: right;}
|
||||||
|
#counters h2 { font-size: 16px; font-family: Avenir, sans-serif; font-weight: lighter; display:inline;}
|
||||||
|
#counters .number { font-size: 20px;}
|
||||||
|
#fail-count { color: #D0021B; margin-left:10px;}
|
||||||
|
@media (max-width: 640px) {
|
||||||
|
h1, #counters, #segment-bar { margin: 5px auto; text-align:center;}
|
||||||
|
header, #segment-bar { width: 100%; position: relative; background:none;}
|
||||||
|
.left, .right { float:none; margin:0;}
|
||||||
|
#test-suites { margin-top: 0;}
|
||||||
|
#counters { float:none;}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript">
|
||||||
|
var hide = function(element) { element.style.display = 'none';}
|
||||||
|
var show = function(element) { element.style.display = '';}
|
||||||
|
var isHidden = function(element) { return element.style.display == 'none';}
|
||||||
|
var isSelected = function(element) { return element.classList.contains("selected");}
|
||||||
|
var deselect = function(element) { return element.classList.remove("selected");}
|
||||||
|
var select = function(element) { return element.classList.add("selected");}
|
||||||
|
var toggle = function(element) { isHidden(element) ? show(element) : hide(element);};
|
||||||
|
var toggleTests = function(heading) { toggle(heading.parentNode.children[1]);};
|
||||||
|
var toggleDetails = function(detailClass) {
|
||||||
|
var details = document.querySelectorAll('.' + detailClass);
|
||||||
|
for (var i = details.length - 1; i >= 0; i--) { toggle(details[i]);};
|
||||||
|
};
|
||||||
|
var hideAll = function(collection) {
|
||||||
|
for (var i = collection.length - 1; i >= 0; i--) { hide(collection[i]); };
|
||||||
|
}
|
||||||
|
var showAll = function(collection) {
|
||||||
|
for (var i = collection.length - 1; i >= 0; i--) { show(collection[i]); };
|
||||||
|
}
|
||||||
|
var selectSegment = function(segment) {
|
||||||
|
if (isSelected(segment)) return;
|
||||||
|
var segments = document.querySelectorAll('#segment-bar > a');
|
||||||
|
for (var i = segments.length - 1; i >= 0; i--) { deselect(segments[i]);};
|
||||||
|
select(segment);
|
||||||
|
if (segment.id == "all-segment") {
|
||||||
|
showAll(document.querySelectorAll('.test-suite'));
|
||||||
|
showAll(document.querySelectorAll('.test'));
|
||||||
|
} else if (segment.id == "failing-segment") {
|
||||||
|
hideAll(document.querySelectorAll('.test.passing'));
|
||||||
|
showAll(document.querySelectorAll('.test.failing'));
|
||||||
|
hideAll(document.querySelectorAll('.test-suite.passing'));
|
||||||
|
showAll(document.querySelectorAll('.test-suite.failing'));
|
||||||
|
} else if (segment.id == "passing-segment") {
|
||||||
|
hideAll(document.querySelectorAll('.test.failing'));
|
||||||
|
showAll(document.querySelectorAll('.test.passing'));
|
||||||
|
hideAll(document.querySelectorAll('.test-suite.failing'));
|
||||||
|
showAll(document.querySelectorAll('.test-suite.passing'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var toggleScreenshot = function(suiteName, index) {
|
||||||
|
var screenshot = document.getElementById("screenshot-" + suiteName + "-" + index);
|
||||||
|
isSelected(screenshot) ? deselect(screenshot) : select(screenshot);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<section class="left">
|
||||||
|
<h1>Test Results</h1>
|
||||||
|
</section>
|
||||||
|
<section class="right">
|
||||||
|
<section id="counters">
|
||||||
|
<h2 id="test-count"><span class="number">0</span> tests</h2>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<section id="segment-bar">
|
||||||
|
<a id="all-segment" onclick="selectSegment(this);" class="selected">All</a><a id="failing-segment" onclick="selectSegment(this);">Failing</a><a id="passing-segment" onclick="selectSegment(this);">Passing</a>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</header>
|
||||||
|
<section id="test-suites">
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<footer>Report generated with <a href="https://github.com/supermarin/xcpretty">xcpretty</a></footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<testsuites tests='0' failures='0'/>
|
||||||