Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a778f03d8f | ||
|
|
7dd51b88b8 | ||
|
|
fe086e3d34 | ||
|
|
c5947fa41b | ||
|
|
8ad819052c | ||
|
|
318d3e1f8e | ||
|
|
a7a6a1b315 | ||
|
|
96a45035a9 | ||
|
|
003ca5c285 | ||
|
|
bc2e69440c | ||
|
|
794d5a2d86 | ||
|
|
c5beca03f7 | ||
|
|
7ee4cfa0fd | ||
|
|
4dc34e956a | ||
|
|
584e357f0e | ||
|
|
243ee49fc1 | ||
|
|
5f53dbe6b5 | ||
|
|
97ceb32d29 | ||
|
|
29ce192b5c | ||
|
|
6974e707dc | ||
|
|
b93d2f0d2a | ||
|
|
2127942e5f | ||
|
|
fd1107d42e | ||
|
|
1487636084 |
+43
@@ -0,0 +1,43 @@
|
|||||||
|
# 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/
|
||||||
|
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
4.0
|
4.2
|
||||||
|
|||||||
@@ -1,6 +1,30 @@
|
|||||||
Changelog
|
Changelog
|
||||||
==========
|
==========
|
||||||
|
|
||||||
|
### 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
|
||||||
|
|||||||
+549
File diff suppressed because one or more lines are too long
+552
File diff suppressed because one or more lines are too long
+20
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>English</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>com.apple.xcode.dsym.com.OpenSourceController.OpenSourceController-iOS</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>dSYM</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
Carthage/Build/iOS/OpenSourceController.framework.dSYM/Contents/Resources/DWARF/OpenSourceController
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
+234
@@ -0,0 +1,234 @@
|
|||||||
|
// Generated by Apple Swift version 4.0.3 (swiftlang-900.0.74.1 clang-900.0.39.2)
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wgcc-compat"
|
||||||
|
|
||||||
|
#if !defined(__has_include)
|
||||||
|
# define __has_include(x) 0
|
||||||
|
#endif
|
||||||
|
#if !defined(__has_attribute)
|
||||||
|
# define __has_attribute(x) 0
|
||||||
|
#endif
|
||||||
|
#if !defined(__has_feature)
|
||||||
|
# define __has_feature(x) 0
|
||||||
|
#endif
|
||||||
|
#if !defined(__has_warning)
|
||||||
|
# define __has_warning(x) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __has_attribute(external_source_symbol)
|
||||||
|
# define SWIFT_STRINGIFY(str) #str
|
||||||
|
# define SWIFT_MODULE_NAMESPACE_PUSH(module_name) _Pragma(SWIFT_STRINGIFY(clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in=module_name, generated_declaration))), apply_to=any(function, enum, objc_interface, objc_category, objc_protocol))))
|
||||||
|
# define SWIFT_MODULE_NAMESPACE_POP _Pragma("clang attribute pop")
|
||||||
|
#else
|
||||||
|
# define SWIFT_MODULE_NAMESPACE_PUSH(module_name)
|
||||||
|
# define SWIFT_MODULE_NAMESPACE_POP
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __has_include(<swift/objc-prologue.h>)
|
||||||
|
# include <swift/objc-prologue.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#pragma clang diagnostic ignored "-Wauto-import"
|
||||||
|
#include <objc/NSObject.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#if !defined(SWIFT_TYPEDEFS)
|
||||||
|
# define SWIFT_TYPEDEFS 1
|
||||||
|
# if __has_include(<uchar.h>)
|
||||||
|
# include <uchar.h>
|
||||||
|
# elif !defined(__cplusplus) || __cplusplus < 201103L
|
||||||
|
typedef uint_least16_t char16_t;
|
||||||
|
typedef uint_least32_t char32_t;
|
||||||
|
# endif
|
||||||
|
typedef float swift_float2 __attribute__((__ext_vector_type__(2)));
|
||||||
|
typedef float swift_float3 __attribute__((__ext_vector_type__(3)));
|
||||||
|
typedef float swift_float4 __attribute__((__ext_vector_type__(4)));
|
||||||
|
typedef double swift_double2 __attribute__((__ext_vector_type__(2)));
|
||||||
|
typedef double swift_double3 __attribute__((__ext_vector_type__(3)));
|
||||||
|
typedef double swift_double4 __attribute__((__ext_vector_type__(4)));
|
||||||
|
typedef int swift_int2 __attribute__((__ext_vector_type__(2)));
|
||||||
|
typedef int swift_int3 __attribute__((__ext_vector_type__(3)));
|
||||||
|
typedef int swift_int4 __attribute__((__ext_vector_type__(4)));
|
||||||
|
typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2)));
|
||||||
|
typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3)));
|
||||||
|
typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(SWIFT_PASTE)
|
||||||
|
# define SWIFT_PASTE_HELPER(x, y) x##y
|
||||||
|
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
|
||||||
|
#endif
|
||||||
|
#if !defined(SWIFT_METATYPE)
|
||||||
|
# define SWIFT_METATYPE(X) Class
|
||||||
|
#endif
|
||||||
|
#if !defined(SWIFT_CLASS_PROPERTY)
|
||||||
|
# if __has_feature(objc_class_property)
|
||||||
|
# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
|
||||||
|
# else
|
||||||
|
# define SWIFT_CLASS_PROPERTY(...)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __has_attribute(objc_runtime_name)
|
||||||
|
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
|
||||||
|
#else
|
||||||
|
# define SWIFT_RUNTIME_NAME(X)
|
||||||
|
#endif
|
||||||
|
#if __has_attribute(swift_name)
|
||||||
|
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
|
||||||
|
#else
|
||||||
|
# define SWIFT_COMPILE_NAME(X)
|
||||||
|
#endif
|
||||||
|
#if __has_attribute(objc_method_family)
|
||||||
|
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
|
||||||
|
#else
|
||||||
|
# define SWIFT_METHOD_FAMILY(X)
|
||||||
|
#endif
|
||||||
|
#if __has_attribute(noescape)
|
||||||
|
# define SWIFT_NOESCAPE __attribute__((noescape))
|
||||||
|
#else
|
||||||
|
# define SWIFT_NOESCAPE
|
||||||
|
#endif
|
||||||
|
#if __has_attribute(warn_unused_result)
|
||||||
|
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
|
||||||
|
#else
|
||||||
|
# define SWIFT_WARN_UNUSED_RESULT
|
||||||
|
#endif
|
||||||
|
#if __has_attribute(noreturn)
|
||||||
|
# define SWIFT_NORETURN __attribute__((noreturn))
|
||||||
|
#else
|
||||||
|
# define SWIFT_NORETURN
|
||||||
|
#endif
|
||||||
|
#if !defined(SWIFT_CLASS_EXTRA)
|
||||||
|
# define SWIFT_CLASS_EXTRA
|
||||||
|
#endif
|
||||||
|
#if !defined(SWIFT_PROTOCOL_EXTRA)
|
||||||
|
# define SWIFT_PROTOCOL_EXTRA
|
||||||
|
#endif
|
||||||
|
#if !defined(SWIFT_ENUM_EXTRA)
|
||||||
|
# define SWIFT_ENUM_EXTRA
|
||||||
|
#endif
|
||||||
|
#if !defined(SWIFT_CLASS)
|
||||||
|
# if __has_attribute(objc_subclassing_restricted)
|
||||||
|
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
|
||||||
|
# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
|
||||||
|
# else
|
||||||
|
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
|
||||||
|
# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(SWIFT_PROTOCOL)
|
||||||
|
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
|
||||||
|
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(SWIFT_EXTENSION)
|
||||||
|
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(OBJC_DESIGNATED_INITIALIZER)
|
||||||
|
# if __has_attribute(objc_designated_initializer)
|
||||||
|
# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
|
||||||
|
# else
|
||||||
|
# define OBJC_DESIGNATED_INITIALIZER
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#if !defined(SWIFT_ENUM_ATTR)
|
||||||
|
# if defined(__has_attribute) && __has_attribute(enum_extensibility)
|
||||||
|
# define SWIFT_ENUM_ATTR __attribute__((enum_extensibility(open)))
|
||||||
|
# else
|
||||||
|
# define SWIFT_ENUM_ATTR
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#if !defined(SWIFT_ENUM)
|
||||||
|
# define SWIFT_ENUM(_type, _name) enum _name : _type _name; enum SWIFT_ENUM_ATTR SWIFT_ENUM_EXTRA _name : _type
|
||||||
|
# if __has_feature(generalized_swift_name)
|
||||||
|
# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR SWIFT_ENUM_EXTRA _name : _type
|
||||||
|
# else
|
||||||
|
# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME) SWIFT_ENUM(_type, _name)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#if !defined(SWIFT_UNAVAILABLE)
|
||||||
|
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
|
||||||
|
#endif
|
||||||
|
#if !defined(SWIFT_UNAVAILABLE_MSG)
|
||||||
|
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
|
||||||
|
#endif
|
||||||
|
#if !defined(SWIFT_AVAILABILITY)
|
||||||
|
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
|
||||||
|
#endif
|
||||||
|
#if !defined(SWIFT_DEPRECATED)
|
||||||
|
# define SWIFT_DEPRECATED __attribute__((deprecated))
|
||||||
|
#endif
|
||||||
|
#if !defined(SWIFT_DEPRECATED_MSG)
|
||||||
|
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
|
||||||
|
#endif
|
||||||
|
#if __has_feature(attribute_diagnose_if_objc)
|
||||||
|
# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
|
||||||
|
#else
|
||||||
|
# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
|
||||||
|
#endif
|
||||||
|
#if __has_feature(modules)
|
||||||
|
@import ObjectiveC;
|
||||||
|
@import UIKit;
|
||||||
|
@import Foundation;
|
||||||
|
@import CoreGraphics;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
|
||||||
|
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
|
||||||
|
#if __has_warning("-Wpragma-clang-attribute")
|
||||||
|
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
|
||||||
|
#endif
|
||||||
|
#pragma clang diagnostic ignored "-Wunknown-pragmas"
|
||||||
|
#pragma clang diagnostic ignored "-Wnullability"
|
||||||
|
|
||||||
|
SWIFT_MODULE_NAMESPACE_PUSH("OpenSourceController")
|
||||||
|
|
||||||
|
SWIFT_CLASS("_TtC20OpenSourceController17LicenceDownloader")
|
||||||
|
@interface LicenceDownloader : NSObject
|
||||||
|
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
SWIFT_CLASS("_TtC20OpenSourceController11LicenceFile")
|
||||||
|
@interface LicenceFile : NSObject
|
||||||
|
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
SWIFT_CLASS("_TtC20OpenSourceController20OpenSourceController")
|
||||||
|
@interface OpenSourceController : NSObject
|
||||||
|
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@class NSCoder;
|
||||||
|
|
||||||
|
SWIFT_CLASS("_TtC20OpenSourceController23OpenSourceTableViewCell")
|
||||||
|
@interface OpenSourceTableViewCell : UITableViewCell
|
||||||
|
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
|
||||||
|
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
|
||||||
|
- (void)setSelected:(BOOL)selected animated:(BOOL)animated;
|
||||||
|
- (void)layoutSubviews;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@class UITableView;
|
||||||
|
@class NSBundle;
|
||||||
|
|
||||||
|
SWIFT_CLASS("_TtC20OpenSourceController24OpenSourceViewController")
|
||||||
|
@interface OpenSourceViewController : UITableViewController
|
||||||
|
- (void)viewDidLoad;
|
||||||
|
- (NSInteger)numberOfSectionsInTableView:(UITableView * _Nonnull)tableView SWIFT_WARN_UNUSED_RESULT;
|
||||||
|
- (NSInteger)tableView:(UITableView * _Nonnull)tableView numberOfRowsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
|
||||||
|
- (UITableViewCell * _Nonnull)tableView:(UITableView * _Nonnull)tableView cellForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
|
||||||
|
- (CGFloat)tableView:(UITableView * _Nonnull)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
|
||||||
|
- (nonnull instancetype)initWithStyle:(UITableViewStyle)style OBJC_DESIGNATED_INITIALIZER;
|
||||||
|
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
|
||||||
|
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
|
||||||
|
@end
|
||||||
|
|
||||||
|
SWIFT_MODULE_NAMESPACE_POP
|
||||||
|
#pragma clang diagnostic pop
|
||||||
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
Generated
Vendored
BIN
Binary file not shown.
+4
@@ -0,0 +1,4 @@
|
|||||||
|
framework module OpenSourceController {
|
||||||
|
header "OpenSourceController-Swift.h"
|
||||||
|
requires objc
|
||||||
|
}
|
||||||
Generated
Vendored
Executable
BIN
Binary file not shown.
@@ -7,21 +7,36 @@
|
|||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
76229B602180AB5000A61697 /* OpenSourceControllerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B5E2180AB5000A61697 /* OpenSourceControllerConfig.swift */; };
|
||||||
|
76229B612180AB5000A61697 /* OpenSourceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B5F2180AB5000A61697 /* OpenSourceController.swift */; };
|
||||||
|
76229B662180AB5D00A61697 /* OpenSourceTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B622180AB5C00A61697 /* OpenSourceTableViewCell.swift */; };
|
||||||
|
76229B672180AB5D00A61697 /* LoadingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B632180AB5D00A61697 /* LoadingViewController.swift */; };
|
||||||
|
76229B682180AB5D00A61697 /* OpenSourceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B642180AB5D00A61697 /* OpenSourceViewController.swift */; };
|
||||||
|
76229B692180AB5D00A61697 /* LicenceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B652180AB5D00A61697 /* LicenceListViewController.swift */; };
|
||||||
|
76229B832180AFAD00A61697 /* HTTPDataLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B822180AFAD00A61697 /* HTTPDataLoader.swift */; };
|
||||||
|
7627B06221807C4B0057FFBB /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 7627B06121807C4B0057FFBB /* README.md */; };
|
||||||
76EAA8651E93F2CC009A41DA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8641E93F2CC009A41DA /* AppDelegate.swift */; };
|
76EAA8651E93F2CC009A41DA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8641E93F2CC009A41DA /* AppDelegate.swift */; };
|
||||||
76EAA8671E93F2CC009A41DA /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8661E93F2CC009A41DA /* ViewController.swift */; };
|
76EAA8671E93F2CC009A41DA /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8661E93F2CC009A41DA /* ViewController.swift */; };
|
||||||
76EAA86A1E93F2CC009A41DA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 76EAA8681E93F2CC009A41DA /* Main.storyboard */; };
|
76EAA86A1E93F2CC009A41DA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 76EAA8681E93F2CC009A41DA /* Main.storyboard */; };
|
||||||
76EAA86C1E93F2CC009A41DA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 76EAA86B1E93F2CC009A41DA /* Assets.xcassets */; };
|
76EAA86C1E93F2CC009A41DA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 76EAA86B1E93F2CC009A41DA /* Assets.xcassets */; };
|
||||||
76EAA86F1E93F2CC009A41DA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 76EAA86D1E93F2CC009A41DA /* LaunchScreen.storyboard */; };
|
76EAA86F1E93F2CC009A41DA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 76EAA86D1E93F2CC009A41DA /* LaunchScreen.storyboard */; };
|
||||||
76EAA8881E93F666009A41DA /* OpenSourceTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8871E93F666009A41DA /* OpenSourceTableViewCell.swift */; };
|
76EAA88D1E93F675009A41DA /* LicenceLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA88A1E93F675009A41DA /* LicenceLoader.swift */; };
|
||||||
76EAA88D1E93F675009A41DA /* LicenceDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA88A1E93F675009A41DA /* LicenceDownloader.swift */; };
|
|
||||||
76EAA88E1E93F675009A41DA /* LicenceFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA88B1E93F675009A41DA /* LicenceFile.swift */; };
|
76EAA88E1E93F675009A41DA /* LicenceFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA88B1E93F675009A41DA /* LicenceFile.swift */; };
|
||||||
76EAA88F1E93F675009A41DA /* OpenSourceControllerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA88C1E93F675009A41DA /* OpenSourceControllerConfig.swift */; };
|
|
||||||
76EAA8911E93F67B009A41DA /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8901E93F67B009A41DA /* Array+Extensions.swift */; };
|
76EAA8911E93F67B009A41DA /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8901E93F67B009A41DA /* Array+Extensions.swift */; };
|
||||||
76EAA8941E93F681009A41DA /* OpenSourceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8921E93F681009A41DA /* OpenSourceController.swift */; };
|
76FED173217F6CEF0037BD09 /* UIViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76FED172217F6CEF0037BD09 /* UIViewController+Extensions.swift */; };
|
||||||
76EAA8951E93F681009A41DA /* OpenSourceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8931E93F681009A41DA /* OpenSourceViewController.swift */; };
|
76FED175217F6D400037BD09 /* UIView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76FED174217F6D400037BD09 /* UIView+Extensions.swift */; };
|
||||||
|
C33E4D96204442AC00142EE6 /* CHANGELOG.md in Resources */ = {isa = PBXBuildFile; fileRef = C33E4D95204442AC00142EE6 /* CHANGELOG.md */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
76229B5E2180AB5000A61697 /* OpenSourceControllerConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceControllerConfig.swift; path = ../../Sources/OpenSourceControllerConfig.swift; sourceTree = "<group>"; };
|
||||||
|
76229B5F2180AB5000A61697 /* OpenSourceController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceController.swift; path = ../../Sources/OpenSourceController.swift; sourceTree = "<group>"; };
|
||||||
|
76229B622180AB5C00A61697 /* OpenSourceTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceTableViewCell.swift; path = ../../Sources/OpenSourceViewController/OpenSourceTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
|
76229B632180AB5D00A61697 /* LoadingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LoadingViewController.swift; path = ../../Sources/OpenSourceViewController/LoadingViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76229B642180AB5D00A61697 /* OpenSourceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceViewController.swift; path = ../../Sources/OpenSourceViewController/OpenSourceViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76229B652180AB5D00A61697 /* LicenceListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceListViewController.swift; path = ../../Sources/OpenSourceViewController/LicenceListViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76229B822180AFAD00A61697 /* HTTPDataLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HTTPDataLoader.swift; path = ../../Sources/Loader/HTTPDataLoader.swift; sourceTree = "<group>"; };
|
||||||
|
7627B06121807C4B0057FFBB /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = "<group>"; };
|
||||||
76EAA8611E93F2CC009A41DA /* OpenSourceControllerDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OpenSourceControllerDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
76EAA8611E93F2CC009A41DA /* OpenSourceControllerDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OpenSourceControllerDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
76EAA8641E93F2CC009A41DA /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
76EAA8641E93F2CC009A41DA /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
76EAA8661E93F2CC009A41DA /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
|
76EAA8661E93F2CC009A41DA /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
|
||||||
@@ -29,13 +44,12 @@
|
|||||||
76EAA86B1E93F2CC009A41DA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
76EAA86B1E93F2CC009A41DA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
76EAA86E1E93F2CC009A41DA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
76EAA86E1E93F2CC009A41DA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
76EAA8701E93F2CC009A41DA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
76EAA8701E93F2CC009A41DA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
76EAA8871E93F666009A41DA /* OpenSourceTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceTableViewCell.swift; path = ../../Sources/View/OpenSourceTableViewCell.swift; sourceTree = "<group>"; };
|
76EAA88A1E93F675009A41DA /* LicenceLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceLoader.swift; path = ../../Sources/Model/LicenceLoader.swift; sourceTree = "<group>"; };
|
||||||
76EAA88A1E93F675009A41DA /* LicenceDownloader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceDownloader.swift; path = ../../Sources/Model/LicenceDownloader.swift; sourceTree = "<group>"; };
|
|
||||||
76EAA88B1E93F675009A41DA /* LicenceFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceFile.swift; path = ../../Sources/Model/LicenceFile.swift; sourceTree = "<group>"; };
|
76EAA88B1E93F675009A41DA /* LicenceFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceFile.swift; path = ../../Sources/Model/LicenceFile.swift; sourceTree = "<group>"; };
|
||||||
76EAA88C1E93F675009A41DA /* OpenSourceControllerConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceControllerConfig.swift; path = ../../Sources/Model/OpenSourceControllerConfig.swift; sourceTree = "<group>"; };
|
|
||||||
76EAA8901E93F67B009A41DA /* Array+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Array+Extensions.swift"; path = "../../Sources/Extensions/Array+Extensions.swift"; sourceTree = "<group>"; };
|
76EAA8901E93F67B009A41DA /* Array+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Array+Extensions.swift"; path = "../../Sources/Extensions/Array+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
76EAA8921E93F681009A41DA /* OpenSourceController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceController.swift; path = ../../Sources/Controller/OpenSourceController.swift; sourceTree = "<group>"; };
|
76FED172217F6CEF0037BD09 /* UIViewController+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIViewController+Extensions.swift"; path = "../../Sources/Extensions/UIViewController+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
76EAA8931E93F681009A41DA /* OpenSourceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceViewController.swift; path = ../../Sources/Controller/OpenSourceViewController.swift; sourceTree = "<group>"; };
|
76FED174217F6D400037BD09 /* UIView+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "UIView+Extensions.swift"; path = "../../Sources/Extensions/UIView+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
|
C33E4D95204442AC00142EE6 /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; name = CHANGELOG.md; path = ../CHANGELOG.md; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@@ -49,9 +63,19 @@
|
|||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
76229B5D2180AA8E00A61697 /* Loader */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76229B822180AFAD00A61697 /* HTTPDataLoader.swift */,
|
||||||
|
);
|
||||||
|
name = Loader;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
76EAA8581E93F2CC009A41DA = {
|
76EAA8581E93F2CC009A41DA = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
C33E4D95204442AC00142EE6 /* CHANGELOG.md */,
|
||||||
|
7627B06121807C4B0057FFBB /* README.md */,
|
||||||
76EAA8631E93F2CC009A41DA /* OpenSourceControllerDemo */,
|
76EAA8631E93F2CC009A41DA /* OpenSourceControllerDemo */,
|
||||||
76EAA8621E93F2CC009A41DA /* Products */,
|
76EAA8621E93F2CC009A41DA /* Products */,
|
||||||
);
|
);
|
||||||
@@ -70,11 +94,11 @@
|
|||||||
children = (
|
children = (
|
||||||
76EAA8641E93F2CC009A41DA /* AppDelegate.swift */,
|
76EAA8641E93F2CC009A41DA /* AppDelegate.swift */,
|
||||||
76EAA8661E93F2CC009A41DA /* ViewController.swift */,
|
76EAA8661E93F2CC009A41DA /* ViewController.swift */,
|
||||||
76EAA8891E93F66A009A41DA /* Sources */,
|
|
||||||
76EAA8681E93F2CC009A41DA /* Main.storyboard */,
|
76EAA8681E93F2CC009A41DA /* Main.storyboard */,
|
||||||
76EAA86D1E93F2CC009A41DA /* LaunchScreen.storyboard */,
|
76EAA86D1E93F2CC009A41DA /* LaunchScreen.storyboard */,
|
||||||
76EAA86B1E93F2CC009A41DA /* Assets.xcassets */,
|
76EAA86B1E93F2CC009A41DA /* Assets.xcassets */,
|
||||||
76EAA8701E93F2CC009A41DA /* Info.plist */,
|
76EAA8701E93F2CC009A41DA /* Info.plist */,
|
||||||
|
76EAA8891E93F66A009A41DA /* Sources */,
|
||||||
);
|
);
|
||||||
path = OpenSourceControllerDemo;
|
path = OpenSourceControllerDemo;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -82,17 +106,46 @@
|
|||||||
76EAA8891E93F66A009A41DA /* Sources */ = {
|
76EAA8891E93F66A009A41DA /* Sources */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
76EAA8921E93F681009A41DA /* OpenSourceController.swift */,
|
76229B5F2180AB5000A61697 /* OpenSourceController.swift */,
|
||||||
76EAA8931E93F681009A41DA /* OpenSourceViewController.swift */,
|
76229B5E2180AB5000A61697 /* OpenSourceControllerConfig.swift */,
|
||||||
76EAA8901E93F67B009A41DA /* Array+Extensions.swift */,
|
76FED17B217F6E2E0037BD09 /* OpenSourceViewController */,
|
||||||
76EAA88A1E93F675009A41DA /* LicenceDownloader.swift */,
|
76FED17A217F6E0F0037BD09 /* Extensions */,
|
||||||
76EAA88B1E93F675009A41DA /* LicenceFile.swift */,
|
76229B5D2180AA8E00A61697 /* Loader */,
|
||||||
76EAA88C1E93F675009A41DA /* OpenSourceControllerConfig.swift */,
|
76FED17C217F6E4A0037BD09 /* Model */,
|
||||||
76EAA8871E93F666009A41DA /* OpenSourceTableViewCell.swift */,
|
|
||||||
);
|
);
|
||||||
name = Sources;
|
name = Sources;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
76FED17A217F6E0F0037BD09 /* Extensions */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76FED172217F6CEF0037BD09 /* UIViewController+Extensions.swift */,
|
||||||
|
76EAA8901E93F67B009A41DA /* Array+Extensions.swift */,
|
||||||
|
76FED174217F6D400037BD09 /* UIView+Extensions.swift */,
|
||||||
|
);
|
||||||
|
name = Extensions;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
76FED17B217F6E2E0037BD09 /* OpenSourceViewController */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76229B652180AB5D00A61697 /* LicenceListViewController.swift */,
|
||||||
|
76229B632180AB5D00A61697 /* LoadingViewController.swift */,
|
||||||
|
76229B622180AB5C00A61697 /* OpenSourceTableViewCell.swift */,
|
||||||
|
76229B642180AB5D00A61697 /* OpenSourceViewController.swift */,
|
||||||
|
);
|
||||||
|
name = OpenSourceViewController;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
76FED17C217F6E4A0037BD09 /* Model */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76EAA88A1E93F675009A41DA /* LicenceLoader.swift */,
|
||||||
|
76EAA88B1E93F675009A41DA /* LicenceFile.swift */,
|
||||||
|
);
|
||||||
|
name = Model;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
@@ -120,13 +173,13 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 0830;
|
LastSwiftUpdateCheck = 0830;
|
||||||
LastUpgradeCheck = 0900;
|
LastUpgradeCheck = 1000;
|
||||||
ORGANIZATIONNAME = OpenSourceController;
|
ORGANIZATIONNAME = OpenSourceController;
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
76EAA8601E93F2CC009A41DA = {
|
76EAA8601E93F2CC009A41DA = {
|
||||||
CreatedOnToolsVersion = 8.3;
|
CreatedOnToolsVersion = 8.3;
|
||||||
DevelopmentTeam = 62PP362QNQ;
|
DevelopmentTeam = 62PP362QNQ;
|
||||||
LastSwiftMigration = 0900;
|
LastSwiftMigration = 1000;
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Automatic;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -156,7 +209,9 @@
|
|||||||
files = (
|
files = (
|
||||||
76EAA86F1E93F2CC009A41DA /* LaunchScreen.storyboard in Resources */,
|
76EAA86F1E93F2CC009A41DA /* LaunchScreen.storyboard in Resources */,
|
||||||
76EAA86C1E93F2CC009A41DA /* Assets.xcassets in Resources */,
|
76EAA86C1E93F2CC009A41DA /* Assets.xcassets in Resources */,
|
||||||
|
7627B06221807C4B0057FFBB /* README.md in Resources */,
|
||||||
76EAA86A1E93F2CC009A41DA /* Main.storyboard in Resources */,
|
76EAA86A1E93F2CC009A41DA /* Main.storyboard in Resources */,
|
||||||
|
C33E4D96204442AC00142EE6 /* CHANGELOG.md in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -167,15 +222,20 @@
|
|||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
76EAA88D1E93F675009A41DA /* LicenceDownloader.swift in Sources */,
|
76229B692180AB5D00A61697 /* LicenceListViewController.swift in Sources */,
|
||||||
|
76229B612180AB5000A61697 /* OpenSourceController.swift in Sources */,
|
||||||
|
76EAA88D1E93F675009A41DA /* LicenceLoader.swift in Sources */,
|
||||||
|
76229B682180AB5D00A61697 /* OpenSourceViewController.swift in Sources */,
|
||||||
76EAA88E1E93F675009A41DA /* LicenceFile.swift in Sources */,
|
76EAA88E1E93F675009A41DA /* LicenceFile.swift in Sources */,
|
||||||
76EAA8951E93F681009A41DA /* OpenSourceViewController.swift in Sources */,
|
76229B662180AB5D00A61697 /* OpenSourceTableViewCell.swift in Sources */,
|
||||||
76EAA8881E93F666009A41DA /* OpenSourceTableViewCell.swift in Sources */,
|
76229B832180AFAD00A61697 /* HTTPDataLoader.swift in Sources */,
|
||||||
|
76FED173217F6CEF0037BD09 /* UIViewController+Extensions.swift in Sources */,
|
||||||
76EAA8911E93F67B009A41DA /* Array+Extensions.swift in Sources */,
|
76EAA8911E93F67B009A41DA /* Array+Extensions.swift in Sources */,
|
||||||
76EAA8941E93F681009A41DA /* OpenSourceController.swift in Sources */,
|
|
||||||
76EAA8671E93F2CC009A41DA /* ViewController.swift in Sources */,
|
76EAA8671E93F2CC009A41DA /* ViewController.swift in Sources */,
|
||||||
76EAA88F1E93F675009A41DA /* OpenSourceControllerConfig.swift in Sources */,
|
76FED175217F6D400037BD09 /* UIView+Extensions.swift in Sources */,
|
||||||
76EAA8651E93F2CC009A41DA /* AppDelegate.swift in Sources */,
|
76EAA8651E93F2CC009A41DA /* AppDelegate.swift in Sources */,
|
||||||
|
76229B602180AB5000A61697 /* OpenSourceControllerConfig.swift in Sources */,
|
||||||
|
76229B672180AB5D00A61697 /* LoadingViewController.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -215,6 +275,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 +283,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;
|
||||||
@@ -273,6 +335,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 +343,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;
|
||||||
@@ -319,8 +383,7 @@
|
|||||||
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;
|
SWIFT_VERSION = 4.2;
|
||||||
SWIFT_VERSION = 4.0;
|
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -333,8 +396,7 @@
|
|||||||
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;
|
SWIFT_VERSION = 4.2;
|
||||||
SWIFT_VERSION = 4.0;
|
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
|||||||
+8
@@ -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>
|
||||||
+8
@@ -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>BuildSystemType</key>
|
||||||
|
<string>Latest</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
Binary file not shown.
+18
@@ -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>
|
||||||
BIN
Binary file not shown.
+14
@@ -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
-3
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0900"
|
LastUpgradeVersion = "1000"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -26,7 +26,6 @@
|
|||||||
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">
|
||||||
<Testables>
|
<Testables>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
@@ -56,7 +55,6 @@
|
|||||||
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"
|
||||||
|
|||||||
@@ -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:.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 287 KiB |
@@ -1,12 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="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="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="fdz-at-fDg">
|
||||||
<device id="retina4_7" orientation="portrait">
|
<device id="retina4_7" orientation="portrait">
|
||||||
<adaptation id="fullscreen"/>
|
<adaptation id="fullscreen"/>
|
||||||
</device>
|
</device>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<deployment identifier="iOS"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13173"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14283.14"/>
|
||||||
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<scenes>
|
<scenes>
|
||||||
@@ -23,7 +22,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LI4-fC-2Ry">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LI4-fC-2Ry">
|
||||||
<rect key="frame" x="23" y="318" width="328" height="30"/>
|
<rect key="frame" x="23" y="318.5" width="329" height="30"/>
|
||||||
<state key="normal" title="Show me"/>
|
<state key="normal" title="Show me"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="showOpenSource:" destination="BYZ-38-t0r" eventType="touchUpInside" id="vmT-jj-Xvr"/>
|
<action selector="showOpenSource:" destination="BYZ-38-t0r" eventType="touchUpInside" id="vmT-jj-Xvr"/>
|
||||||
@@ -37,10 +36,29 @@
|
|||||||
<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" 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="20" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</navigationBar>
|
||||||
|
<nil name="viewControllers"/>
|
||||||
|
<connections>
|
||||||
|
<segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="v9Q-2O-OOv"/>
|
||||||
|
</connections>
|
||||||
|
</navigationController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="sjw-k6-nEt" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="815.20000000000005" y="138.98050974512745"/>
|
||||||
</scene>
|
</scene>
|
||||||
</scenes>
|
</scenes>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
@@ -14,12 +14,6 @@ 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
|
||||||
@@ -30,7 +24,7 @@ class ViewController: UIViewController {
|
|||||||
let openSourceVC = OpenSourceController()
|
let openSourceVC = OpenSourceController()
|
||||||
|
|
||||||
// Apply some customisation if you want
|
// Apply some customisation if you want
|
||||||
//self.controllerCustomUI(openSourceVC: openSourceVC)
|
//self.applyCustomUI(openSourceVC: openSourceVC)
|
||||||
|
|
||||||
// Init with LicenceFile object
|
// Init with LicenceFile object
|
||||||
openSourceVC.licences = [LicenceFile(title: "FacebookImagePicker",
|
openSourceVC.licences = [LicenceFile(title: "FacebookImagePicker",
|
||||||
@@ -43,18 +37,19 @@ class ViewController: UIViewController {
|
|||||||
url: "https://raw.githubusercontent.com/nickoneill/PermissionScope/master/LICENSE"),
|
url: "https://raw.githubusercontent.com/nickoneill/PermissionScope/master/LICENSE"),
|
||||||
LicenceFile(title: "EasyTipView",
|
LicenceFile(title: "EasyTipView",
|
||||||
url: "https://raw.githubusercontent.com/teodorpatras/EasyTipView/master/LICENSE"),
|
url: "https://raw.githubusercontent.com/teodorpatras/EasyTipView/master/LICENSE"),
|
||||||
LicenceFile(title: "ReachabilitySwift",
|
LicenceFile(title: "FakeAdress",
|
||||||
url: "https://raw.githubusercontent.com/ashleymills/Reachability.swift/master/LICENSE"),
|
url: "https://raw.giusercontent.com/ashleymills/Reachability.swift/master/LICENSE"),
|
||||||
LicenceFile(title: "KeychainAccess",
|
LicenceFile(title: "KeychainAccess",
|
||||||
url: "https://raw.githubusercontent.com/kishikawakatsumi/KeychainAccess/master/LICENSE")]
|
url: "https://raw.githubusercontent.com/kishikawakatsumi/KeychainAccess/master/LICENSE")]
|
||||||
|
|
||||||
// Present controller
|
// Present controller
|
||||||
openSourceVC.presentOpenSourceController(from: self)
|
openSourceVC.pushOpenSourceController(from: self)
|
||||||
|
//openSourceVC.presentOpenSourceController(from: self)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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"
|
||||||
|
|
||||||
@@ -62,16 +57,16 @@ class ViewController: UIViewController {
|
|||||||
openSourceVC.config.uiConfig.barTintColor = UIColor.red
|
openSourceVC.config.uiConfig.barTintColor = UIColor.red
|
||||||
|
|
||||||
// Close button color
|
// Close button color
|
||||||
openSourceVC.config.uiConfig.closeButtonColor = UIColor.white
|
openSourceVC.config.uiConfig.closeButtonColor = UIColor.green
|
||||||
|
|
||||||
// BackgroundColor
|
// BackgroundColor
|
||||||
openSourceVC.config.uiConfig.backgroundColor = UIColor.red.withAlphaComponent(0.6)
|
openSourceVC.config.uiConfig.backgroundColor = UIColor.red.withAlphaComponent(0.6)
|
||||||
|
|
||||||
// Licence text color
|
// Licence text color
|
||||||
openSourceVC.config.uiConfig.licenceTextColor = UIColor.white
|
openSourceVC.config.uiConfig.licenceTextColor = UIColor.green
|
||||||
|
|
||||||
// Navigation bar title color
|
// Navigation bar title color
|
||||||
openSourceVC.config.uiConfig.titleColor = UIColor.white
|
openSourceVC.config.uiConfig.titleColor = UIColor.green
|
||||||
|
|
||||||
// Licence cell background color
|
// Licence cell background color
|
||||||
openSourceVC.config.uiConfig.licenceBackgroundColor = UIColor.red
|
openSourceVC.config.uiConfig.licenceBackgroundColor = UIColor.red
|
||||||
|
|||||||
Binary file not shown.
@@ -1,12 +1,12 @@
|
|||||||
Pod::Spec.new do |s|
|
Pod::Spec.new do |s|
|
||||||
s.name = 'OpenSourceController'
|
s.name = 'OpenSourceController'
|
||||||
s.version = '2.0'
|
s.version = '3.1.0'
|
||||||
s.summary = 'Display all the librarys licence used in your application. Enjoy !'
|
s.summary = 'Display all the librarys licence used in your application. Enjoy !'
|
||||||
s.description = 'Display a screen with all licence used in your apply can be painful to maintain. OpenSourceController was built to respond to this problem. OpenSourceController is a simple parser to display the licences which are used in your application.'
|
s.description = 'Display a screen with all licence used in your apply can be painful to maintain. OpenSourceController was built to respond to this problem. OpenSourceController is a simple parser to display the licences which are used in your application.'
|
||||||
s.homepage = 'https://github.com/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/**/*'
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -8,13 +8,18 @@
|
|||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
52D6D9871BEFF229002C0205 /* OpenSourceController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52D6D97C1BEFF229002C0205 /* OpenSourceController.framework */; };
|
52D6D9871BEFF229002C0205 /* OpenSourceController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52D6D97C1BEFF229002C0205 /* OpenSourceController.framework */; };
|
||||||
76EAA8441E93EDA5009A41DA /* OpenSourceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8421E93EDA5009A41DA /* OpenSourceController.swift */; };
|
76229B6E2180AD6400A61697 /* UIViewController+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B6C2180AD6400A61697 /* UIViewController+Extensions.swift */; };
|
||||||
76EAA8451E93EDA5009A41DA /* OpenSourceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8431E93EDA5009A41DA /* OpenSourceViewController.swift */; };
|
76229B6F2180AD6400A61697 /* UIView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B6D2180AD6400A61697 /* UIView+Extensions.swift */; };
|
||||||
|
76229B722180AD8400A61697 /* LicenceLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B712180AD8400A61697 /* LicenceLoader.swift */; };
|
||||||
|
76229B772180AD8B00A61697 /* OpenSourceTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B732180AD8B00A61697 /* OpenSourceTableViewCell.swift */; };
|
||||||
|
76229B782180AD8B00A61697 /* LoadingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B742180AD8B00A61697 /* LoadingViewController.swift */; };
|
||||||
|
76229B792180AD8B00A61697 /* OpenSourceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B752180AD8B00A61697 /* OpenSourceViewController.swift */; };
|
||||||
|
76229B7A2180AD8B00A61697 /* LicenceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B762180AD8B00A61697 /* LicenceListViewController.swift */; };
|
||||||
|
76229B7D2180AD9F00A61697 /* HTTPDataLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B7C2180AD9F00A61697 /* HTTPDataLoader.swift */; };
|
||||||
|
76229B802180ADA800A61697 /* OpenSourceControllerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B7E2180ADA800A61697 /* OpenSourceControllerConfig.swift */; };
|
||||||
|
76229B812180ADA800A61697 /* OpenSourceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76229B7F2180ADA800A61697 /* OpenSourceController.swift */; };
|
||||||
76EAA8481E93EDB3009A41DA /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8471E93EDB3009A41DA /* Array+Extensions.swift */; };
|
76EAA8481E93EDB3009A41DA /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8471E93EDB3009A41DA /* Array+Extensions.swift */; };
|
||||||
76EAA84E1E93EDCD009A41DA /* LicenceDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA84B1E93EDCD009A41DA /* LicenceDownloader.swift */; };
|
|
||||||
76EAA84F1E93EDCD009A41DA /* LicenceFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA84C1E93EDCD009A41DA /* LicenceFile.swift */; };
|
76EAA84F1E93EDCD009A41DA /* LicenceFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA84C1E93EDCD009A41DA /* LicenceFile.swift */; };
|
||||||
76EAA8501E93EDCD009A41DA /* OpenSourceControllerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA84D1E93EDCD009A41DA /* OpenSourceControllerConfig.swift */; };
|
|
||||||
76EAA8531E93EDF0009A41DA /* OpenSourceTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EAA8521E93EDF0009A41DA /* OpenSourceTableViewCell.swift */; };
|
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
@@ -30,13 +35,18 @@
|
|||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
52D6D97C1BEFF229002C0205 /* OpenSourceController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OpenSourceController.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
52D6D97C1BEFF229002C0205 /* OpenSourceController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OpenSourceController.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
52D6D9861BEFF229002C0205 /* OpenSourceController-iOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "OpenSourceController-iOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
52D6D9861BEFF229002C0205 /* OpenSourceController-iOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "OpenSourceController-iOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
76EAA8421E93EDA5009A41DA /* OpenSourceController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceController.swift; path = Sources/Controller/OpenSourceController.swift; sourceTree = "<group>"; };
|
76229B6C2180AD6400A61697 /* UIViewController+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIViewController+Extensions.swift"; path = "Sources/Extensions/UIViewController+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
76EAA8431E93EDA5009A41DA /* OpenSourceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceViewController.swift; path = Sources/Controller/OpenSourceViewController.swift; sourceTree = "<group>"; };
|
76229B6D2180AD6400A61697 /* UIView+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIView+Extensions.swift"; path = "Sources/Extensions/UIView+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
|
76229B712180AD8400A61697 /* LicenceLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceLoader.swift; path = Sources/Model/LicenceLoader.swift; sourceTree = "<group>"; };
|
||||||
|
76229B732180AD8B00A61697 /* OpenSourceTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceTableViewCell.swift; path = Sources/OpenSourceViewController/OpenSourceTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
|
76229B742180AD8B00A61697 /* LoadingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LoadingViewController.swift; path = Sources/OpenSourceViewController/LoadingViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76229B752180AD8B00A61697 /* OpenSourceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceViewController.swift; path = Sources/OpenSourceViewController/OpenSourceViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76229B762180AD8B00A61697 /* LicenceListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceListViewController.swift; path = Sources/OpenSourceViewController/LicenceListViewController.swift; sourceTree = "<group>"; };
|
||||||
|
76229B7C2180AD9F00A61697 /* HTTPDataLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HTTPDataLoader.swift; path = Sources/Loader/HTTPDataLoader.swift; sourceTree = "<group>"; };
|
||||||
|
76229B7E2180ADA800A61697 /* OpenSourceControllerConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceControllerConfig.swift; path = Sources/OpenSourceControllerConfig.swift; sourceTree = "<group>"; };
|
||||||
|
76229B7F2180ADA800A61697 /* OpenSourceController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceController.swift; path = Sources/OpenSourceController.swift; sourceTree = "<group>"; };
|
||||||
76EAA8471E93EDB3009A41DA /* Array+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Array+Extensions.swift"; path = "Sources/Extensions/Array+Extensions.swift"; sourceTree = "<group>"; };
|
76EAA8471E93EDB3009A41DA /* Array+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Array+Extensions.swift"; path = "Sources/Extensions/Array+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
76EAA84B1E93EDCD009A41DA /* LicenceDownloader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceDownloader.swift; path = Sources/Model/LicenceDownloader.swift; sourceTree = "<group>"; };
|
|
||||||
76EAA84C1E93EDCD009A41DA /* LicenceFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceFile.swift; path = Sources/Model/LicenceFile.swift; sourceTree = "<group>"; };
|
76EAA84C1E93EDCD009A41DA /* LicenceFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LicenceFile.swift; path = Sources/Model/LicenceFile.swift; sourceTree = "<group>"; };
|
||||||
76EAA84D1E93EDCD009A41DA /* OpenSourceControllerConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceControllerConfig.swift; path = Sources/Model/OpenSourceControllerConfig.swift; sourceTree = "<group>"; };
|
|
||||||
76EAA8521E93EDF0009A41DA /* OpenSourceTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OpenSourceTableViewCell.swift; path = Sources/View/OpenSourceTableViewCell.swift; sourceTree = "<group>"; };
|
|
||||||
AD2FAA261CD0B6D800659CF4 /* OpenSourceController.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = OpenSourceController.plist; sourceTree = "<group>"; };
|
AD2FAA261CD0B6D800659CF4 /* OpenSourceController.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = OpenSourceController.plist; sourceTree = "<group>"; };
|
||||||
AD2FAA281CD0B6E100659CF4 /* OpenSourceControllerTests.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = OpenSourceControllerTests.plist; sourceTree = "<group>"; };
|
AD2FAA281CD0B6E100659CF4 /* OpenSourceControllerTests.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = OpenSourceControllerTests.plist; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
@@ -87,18 +97,28 @@
|
|||||||
path = Configs;
|
path = Configs;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
76EAA8461E93EDA9009A41DA /* Controller */ = {
|
76229B702180AD7700A61697 /* Model */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
76EAA8421E93EDA5009A41DA /* OpenSourceController.swift */,
|
76229B712180AD8400A61697 /* LicenceLoader.swift */,
|
||||||
76EAA8431E93EDA5009A41DA /* OpenSourceViewController.swift */,
|
76EAA84C1E93EDCD009A41DA /* LicenceFile.swift */,
|
||||||
);
|
);
|
||||||
name = Controller;
|
name = Model;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
76229B7B2180AD8E00A61697 /* Loader */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
76229B7C2180AD9F00A61697 /* HTTPDataLoader.swift */,
|
||||||
|
);
|
||||||
|
name = Loader;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
76EAA8491E93EDBB009A41DA /* Extensions */ = {
|
76EAA8491E93EDBB009A41DA /* Extensions */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
76229B6D2180AD6400A61697 /* UIView+Extensions.swift */,
|
||||||
|
76229B6C2180AD6400A61697 /* UIViewController+Extensions.swift */,
|
||||||
76EAA8471E93EDB3009A41DA /* Array+Extensions.swift */,
|
76EAA8471E93EDB3009A41DA /* Array+Extensions.swift */,
|
||||||
);
|
);
|
||||||
name = Extensions;
|
name = Extensions;
|
||||||
@@ -107,30 +127,25 @@
|
|||||||
76EAA84A1E93EDC0009A41DA /* Sources */ = {
|
76EAA84A1E93EDC0009A41DA /* Sources */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
76EAA8511E93EDD2009A41DA /* Model */,
|
76229B7F2180ADA800A61697 /* OpenSourceController.swift */,
|
||||||
76EAA8541E93EDF3009A41DA /* View */,
|
76229B7E2180ADA800A61697 /* OpenSourceControllerConfig.swift */,
|
||||||
76EAA8461E93EDA9009A41DA /* Controller */,
|
76229B7B2180AD8E00A61697 /* Loader */,
|
||||||
|
76229B702180AD7700A61697 /* Model */,
|
||||||
|
76EAA8511E93EDD2009A41DA /* Controller */,
|
||||||
76EAA8491E93EDBB009A41DA /* Extensions */,
|
76EAA8491E93EDBB009A41DA /* Extensions */,
|
||||||
);
|
);
|
||||||
name = Sources;
|
name = Sources;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
76EAA8511E93EDD2009A41DA /* Model */ = {
|
76EAA8511E93EDD2009A41DA /* Controller */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
76EAA84B1E93EDCD009A41DA /* LicenceDownloader.swift */,
|
76229B762180AD8B00A61697 /* LicenceListViewController.swift */,
|
||||||
76EAA84C1E93EDCD009A41DA /* LicenceFile.swift */,
|
76229B742180AD8B00A61697 /* LoadingViewController.swift */,
|
||||||
76EAA84D1E93EDCD009A41DA /* OpenSourceControllerConfig.swift */,
|
76229B732180AD8B00A61697 /* OpenSourceTableViewCell.swift */,
|
||||||
|
76229B752180AD8B00A61697 /* OpenSourceViewController.swift */,
|
||||||
);
|
);
|
||||||
name = Model;
|
name = Controller;
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
76EAA8541E93EDF3009A41DA /* View */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
76EAA8521E93EDF0009A41DA /* OpenSourceTableViewCell.swift */,
|
|
||||||
);
|
|
||||||
name = View;
|
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
DD7502721C68FC1B006590AF /* Frameworks */ = {
|
DD7502721C68FC1B006590AF /* Frameworks */ = {
|
||||||
@@ -205,15 +220,18 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 0720;
|
LastSwiftUpdateCheck = 0720;
|
||||||
LastUpgradeCheck = 0900;
|
LastUpgradeCheck = 1000;
|
||||||
ORGANIZATIONNAME = OpenSourceController;
|
ORGANIZATIONNAME = OpenSourceController;
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
52D6D97B1BEFF229002C0205 = {
|
52D6D97B1BEFF229002C0205 = {
|
||||||
CreatedOnToolsVersion = 7.1;
|
CreatedOnToolsVersion = 7.1;
|
||||||
LastSwiftMigration = 0830;
|
DevelopmentTeam = 62PP362QNQ;
|
||||||
|
LastSwiftMigration = 1000;
|
||||||
|
ProvisioningStyle = Automatic;
|
||||||
};
|
};
|
||||||
52D6D9851BEFF229002C0205 = {
|
52D6D9851BEFF229002C0205 = {
|
||||||
CreatedOnToolsVersion = 7.1;
|
CreatedOnToolsVersion = 7.1;
|
||||||
|
DevelopmentTeam = 62PP362QNQ;
|
||||||
LastSwiftMigration = "";
|
LastSwiftMigration = "";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -258,13 +276,18 @@
|
|||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
76EAA84E1E93EDCD009A41DA /* LicenceDownloader.swift in Sources */,
|
76229B782180AD8B00A61697 /* LoadingViewController.swift in Sources */,
|
||||||
|
76229B772180AD8B00A61697 /* OpenSourceTableViewCell.swift in Sources */,
|
||||||
|
76229B7D2180AD9F00A61697 /* HTTPDataLoader.swift in Sources */,
|
||||||
|
76229B7A2180AD8B00A61697 /* LicenceListViewController.swift in Sources */,
|
||||||
|
76229B6F2180AD6400A61697 /* UIView+Extensions.swift in Sources */,
|
||||||
|
76229B792180AD8B00A61697 /* OpenSourceViewController.swift in Sources */,
|
||||||
76EAA84F1E93EDCD009A41DA /* LicenceFile.swift in Sources */,
|
76EAA84F1E93EDCD009A41DA /* LicenceFile.swift in Sources */,
|
||||||
76EAA8441E93EDA5009A41DA /* OpenSourceController.swift in Sources */,
|
76229B722180AD8400A61697 /* LicenceLoader.swift in Sources */,
|
||||||
|
76229B812180ADA800A61697 /* OpenSourceController.swift in Sources */,
|
||||||
|
76229B6E2180AD6400A61697 /* UIViewController+Extensions.swift in Sources */,
|
||||||
|
76229B802180ADA800A61697 /* OpenSourceControllerConfig.swift in Sources */,
|
||||||
76EAA8481E93EDB3009A41DA /* Array+Extensions.swift in Sources */,
|
76EAA8481E93EDB3009A41DA /* Array+Extensions.swift in Sources */,
|
||||||
76EAA8531E93EDF0009A41DA /* OpenSourceTableViewCell.swift in Sources */,
|
|
||||||
76EAA8501E93EDCD009A41DA /* OpenSourceControllerConfig.swift in Sources */,
|
|
||||||
76EAA8451E93EDA5009A41DA /* OpenSourceViewController.swift in Sources */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -298,12 +321,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;
|
||||||
@@ -355,12 +380,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 +425,25 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
|
DEVELOPMENT_TEAM = 62PP362QNQ;
|
||||||
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 = 4.2;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -421,20 +452,24 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
|
DEVELOPMENT_TEAM = 62PP362QNQ;
|
||||||
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 = 4.2;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@@ -443,6 +478,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
DEVELOPMENT_TEAM = 62PP362QNQ;
|
||||||
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";
|
||||||
@@ -457,6 +493,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
DEVELOPMENT_TEAM = 62PP362QNQ;
|
||||||
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";
|
||||||
|
|||||||
+8
@@ -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>
|
||||||
+5
@@ -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>
|
||||||
BIN
Binary file not shown.
+18
@@ -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>
|
||||||
BIN
Binary file not shown.
+3
-5
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0900"
|
LastUpgradeVersion = "1000"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -26,9 +26,8 @@
|
|||||||
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 = ""
|
codeCoverageEnabled = "YES"
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
codeCoverageEnabled = "YES">
|
|
||||||
<Testables>
|
<Testables>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
skipped = "NO">
|
skipped = "NO">
|
||||||
@@ -57,7 +56,6 @@
|
|||||||
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"
|
||||||
|
|||||||
+3
-5
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0900"
|
LastUpgradeVersion = "1000"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -26,9 +26,8 @@
|
|||||||
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 = ""
|
codeCoverageEnabled = "YES"
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
codeCoverageEnabled = "YES">
|
|
||||||
<Testables>
|
<Testables>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
skipped = "NO">
|
skipped = "NO">
|
||||||
@@ -57,7 +56,6 @@
|
|||||||
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"
|
||||||
|
|||||||
+3
-5
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0900"
|
LastUpgradeVersion = "1000"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -26,9 +26,8 @@
|
|||||||
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 = ""
|
codeCoverageEnabled = "YES"
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
codeCoverageEnabled = "YES">
|
|
||||||
<Testables>
|
<Testables>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
skipped = "NO">
|
skipped = "NO">
|
||||||
@@ -57,7 +56,6 @@
|
|||||||
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"
|
||||||
|
|||||||
+3
-5
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "0900"
|
LastUpgradeVersion = "1000"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -26,9 +26,8 @@
|
|||||||
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 = ""
|
codeCoverageEnabled = "YES"
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
codeCoverageEnabled = "YES">
|
|
||||||
<Testables>
|
<Testables>
|
||||||
</Testables>
|
</Testables>
|
||||||
<AdditionalOptions>
|
<AdditionalOptions>
|
||||||
@@ -38,7 +37,6 @@
|
|||||||
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"
|
||||||
|
|||||||
@@ -33,20 +33,21 @@ Display a screen with all licences used in your application can be painful to ma
|
|||||||
- [ ] Download licence from Podfile (https://github.com/terflogag/OpenSourceController/issues/1)
|
- [ ] Download licence from Podfile (https://github.com/terflogag/OpenSourceController/issues/1)
|
||||||
- [ ] Download licence from Cartfile (https://github.com/terflogag/OpenSourceController/issues/2)
|
- [ ] Download licence from Cartfile (https://github.com/terflogag/OpenSourceController/issues/2)
|
||||||
- [ ] Download licence from local file
|
- [ ] Download licence from local file
|
||||||
- [ ] Unit & UI Test
|
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
* Xcode 9
|
* Xcode 9
|
||||||
* iOS 9.0+ target deployment
|
* iOS 9.0+ target deployment
|
||||||
* Swift 3 or Swift 4 project
|
* Swift 3, Swift 4 or Swift 4.2 project
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
- To integrate OpenSourceController into your Xcode project using [CocoaPods](http://cocoapods.org), specify it in your Podfile :
|
- To integrate OpenSourceController into your Xcode project using [CocoaPods](http://cocoapods.org), specify it in your Podfile :
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
pod "OpenSourceController", '~> 2.0'
|
pod "OpenSourceController", '~> 3.0.0' # Swift 4.2 Version
|
||||||
|
|
||||||
|
pod "OpenSourceController", '~> 2.0' # Swift 4.0 Version
|
||||||
|
|
||||||
pod "OpenSourceController", '~> 1.0.8' # Swift 3.1 version
|
pod "OpenSourceController", '~> 1.0.8' # Swift 3.1 version
|
||||||
```
|
```
|
||||||
@@ -54,9 +55,11 @@ pod "OpenSourceController", '~> 1.0.8' # Swift 3.1 version
|
|||||||
- To integrate OpenSourceController into your Xcode project using [Carthage](https://github.com/Carthage/Carthage), specify it in your Cartfile :
|
- To integrate OpenSourceController into your Xcode project using [Carthage](https://github.com/Carthage/Carthage), specify it in your Cartfile :
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
github "terflogag/OpenSourceController" ~> 2.0
|
github "floriangbh/OpenSourceController" ~> 3.0.0 # Swift 4.2 version
|
||||||
|
|
||||||
github "terflogag/OpenSourceController" ~> 1.0.8 # Swift 3.1 version
|
github "floriangbh/OpenSourceController" ~> 2.0 # Swift 4.0 version
|
||||||
|
|
||||||
|
github "floriangbh/OpenSourceController" ~> 1.0.8 # Swift 3.1 version
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
@@ -75,12 +78,15 @@ let openSourceVC = OpenSourceController()
|
|||||||
|
|
||||||
// Init with LicenceFile object
|
// Init with LicenceFile object
|
||||||
openSourceVC.licences = [LicenceFile(title: "FacebookImagePicker",
|
openSourceVC.licences = [LicenceFile(title: "FacebookImagePicker",
|
||||||
url: "https://raw.githubusercontent.com/terflogag/FacebookImagePicker/master/LICENSE"),
|
url: "https://raw.githubusercontent.com/terflogag/FacebookImagePicker/master/LICENSE"),
|
||||||
LicenceFile(title: "JSQMessagesViewController",
|
LicenceFile(title: "JSQMessagesViewController",
|
||||||
url: "https://raw.githubusercontent.com/jessesquires/JSQMessagesViewController/develop/LICENSE")]
|
url: "https://raw.githubusercontent.com/jessesquires/JSQMessagesViewController/develop/LICENSE")]
|
||||||
|
|
||||||
// Present controller
|
// Present controller
|
||||||
openSourceVC.presentOpenSourceController(from: self)
|
openSourceVC.presentOpenSourceController(from: self)
|
||||||
|
|
||||||
|
// OR push the controller if the source controller is embeded in navigation controller
|
||||||
|
openSourceVC.pushOpenSourceController(from: self)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Customisation
|
## Customisation
|
||||||
@@ -121,17 +127,9 @@ 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
|
|
||||||
|
|
||||||
Some applications already use this controller like :
|
|
||||||
- [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 😁
|
|
||||||
|
|
||||||
## Author
|
## Author
|
||||||
|
|
||||||
Florian Gabach, contact@floriangabach.fr
|
Florian Gabach, florian.gabach@gmail.com
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,182 +0,0 @@
|
|||||||
//
|
|
||||||
// OpenSourceViewController.swift
|
|
||||||
// Pods
|
|
||||||
//
|
|
||||||
// Created by Florian Gabach on 05/02/2017.
|
|
||||||
|
|
||||||
import UIKit
|
|
||||||
|
|
||||||
class OpenSourceViewController: UITableViewController {
|
|
||||||
|
|
||||||
// MARK: - Var
|
|
||||||
|
|
||||||
/// Loading indicator
|
|
||||||
fileprivate var indicator = UIActivityIndicatorView()
|
|
||||||
|
|
||||||
/// TableViewCell identifier
|
|
||||||
private let reuseIdentifier = "openSourceCell"
|
|
||||||
|
|
||||||
/// Contains all licence object before downloaded
|
|
||||||
internal var licences: [LicenceFile]?
|
|
||||||
|
|
||||||
// Controller configuration for customization
|
|
||||||
internal var config = OpenSourceControllerConfig()
|
|
||||||
|
|
||||||
/// Contains all licences object after downloaded
|
|
||||||
fileprivate var downloadedLicence: [LicenceFile]? {
|
|
||||||
didSet {
|
|
||||||
// Update UI
|
|
||||||
DispatchQueue.main.async { [weak self] in
|
|
||||||
self?.stopLoading()
|
|
||||||
self?.tableView.reloadData()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Lifecyle
|
|
||||||
|
|
||||||
override func viewDidLoad() {
|
|
||||||
super.viewDidLoad()
|
|
||||||
|
|
||||||
// Prepare tableview
|
|
||||||
self.prepareTableView()
|
|
||||||
|
|
||||||
// Download licences
|
|
||||||
self.prepareLicences()
|
|
||||||
}
|
|
||||||
|
|
||||||
override func didReceiveMemoryWarning() {
|
|
||||||
super.didReceiveMemoryWarning()
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Prepare
|
|
||||||
|
|
||||||
/// Download licences
|
|
||||||
fileprivate func prepareLicences() {
|
|
||||||
if let licences = self.licences {
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close button (on the right corner of navigation bar)
|
|
||||||
let closeButton = UIBarButtonItem(barButtonSystemItem: .stop,
|
|
||||||
target: self,
|
|
||||||
action: #selector(self.closePicker))
|
|
||||||
closeButton.tintColor = config.uiConfig.closeButtonColor ?? UIColor.black
|
|
||||||
self.navigationItem.rightBarButtonItem = closeButton
|
|
||||||
|
|
||||||
// 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
|
|
||||||
|
|
||||||
/// Handler for click on close button
|
|
||||||
@objc fileprivate func closePicker() {
|
|
||||||
self.dismissController()
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Navigation
|
|
||||||
|
|
||||||
/// Dismiss the OpenSourceController
|
|
||||||
func dismissController() {
|
|
||||||
DispatchQueue.main.async { [weak self] in
|
|
||||||
self?.dismiss(animated: true, completion: nil)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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,28 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 23/10/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UIView {
|
||||||
|
|
||||||
|
// MARK: - Layout
|
||||||
|
|
||||||
|
func pinEdges(to other: UIView, withBorderSize size: CGFloat = 0.0) {
|
||||||
|
self.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
self.leadingAnchor.constraint(equalTo: other.leadingAnchor, constant: size).isActive = true
|
||||||
|
self.trailingAnchor.constraint(equalTo: other.trailingAnchor, constant: size).isActive = true
|
||||||
|
self.topAnchor.constraint(equalTo: other.topAnchor, constant: size).isActive = true
|
||||||
|
self.bottomAnchor.constraint(equalTo: other.bottomAnchor, constant: -size).isActive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
func pinCenter(to other: UIView) {
|
||||||
|
self.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
self.centerXAnchor.constraint(equalTo: other.centerXAnchor).isActive = true
|
||||||
|
self.centerYAnchor.constraint(equalTo: other.centerYAnchor).isActive = true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
//
|
||||||
|
// UIViewController+Extensions.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 23/10/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UIViewController {
|
||||||
|
|
||||||
|
// MARK: - Child
|
||||||
|
|
||||||
|
func add(_ child: UIViewController) {
|
||||||
|
self.addChild(child)
|
||||||
|
self.view.addSubview(child.view)
|
||||||
|
child.didMove(toParent: self)
|
||||||
|
}
|
||||||
|
|
||||||
|
func remove() {
|
||||||
|
guard parent != nil else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.willMove(toParent: nil)
|
||||||
|
self.removeFromParent()
|
||||||
|
self.view.removeFromSuperview()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
//
|
||||||
|
// LicenceHTTPLoader.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 24/10/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
final class HTTPDataLoader {
|
||||||
|
func loadData(fromUrl url: String, completion: @escaping (Data?) -> Void) {
|
||||||
|
if let url = URL(string: url) {
|
||||||
|
let task = URLSession.shared.dataTask(with: url) { (data, _, error) in
|
||||||
|
if error != nil {
|
||||||
|
print("OpenSourceController error : \(error?.localizedDescription ?? "") from url : \(url)")
|
||||||
|
}
|
||||||
|
completion(data)
|
||||||
|
}
|
||||||
|
task.resume()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
public class LicenceFile: NSObject {
|
public final class LicenceFile {
|
||||||
|
|
||||||
// MARK- Var
|
// MARK- Var
|
||||||
|
|
||||||
@@ -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) {
|
self.detail = html
|
||||||
|
|
||||||
// Update licence model
|
|
||||||
self.detail = html
|
|
||||||
|
|
||||||
// Log
|
|
||||||
if config.verbose {
|
|
||||||
print("Licence for \(self.title ?? "") downloaded with success.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
completion()
|
|
||||||
}
|
}
|
||||||
task.resume()
|
completion()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class LicenceDownloader: NSObject {
|
final class LicenceLoader {
|
||||||
|
|
||||||
/// Download every licence
|
/// Download every licence
|
||||||
///
|
///
|
||||||
@@ -16,22 +16,20 @@ class LicenceDownloader: NSObject {
|
|||||||
class func downloadLicences(licences: [LicenceFile],
|
class 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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
//
|
||||||
|
// OpenSourceController.swift
|
||||||
|
// Pods
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 05/02/2017.
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
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 licenceController = OpenSourceViewController(licences: licences, showCloseButton: true, configuration: config)
|
||||||
|
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 licenceController = OpenSourceViewController(licences: licences, showCloseButton: false, configuration: config)
|
||||||
|
guard let navigationController = from.navigationController else {
|
||||||
|
assertionFailure("Source controller isn't embeded in navigation controller. Can't push.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
navigationController.pushViewController(licenceController, animated: true)
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-2
@@ -15,7 +15,7 @@ public struct OpenSourceControllerConfig {
|
|||||||
public var barTintColor: UIColor?
|
public var barTintColor: UIColor?
|
||||||
|
|
||||||
/// Will be applied to the navigation bar
|
/// Will be applied to the navigation bar
|
||||||
public var backgroundColor: UIColor?
|
public var backgroundColor: UIColor = .white
|
||||||
|
|
||||||
/// Will be applied to licence text
|
/// Will be applied to licence text
|
||||||
public var licenceBackgroundColor: UIColor?
|
public var licenceBackgroundColor: UIColor?
|
||||||
@@ -33,7 +33,7 @@ public struct OpenSourceControllerConfig {
|
|||||||
/// 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.
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
//
|
||||||
|
// LicenceListViewController.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 23/10/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
final class LicenceListViewController: UITableViewController {
|
||||||
|
|
||||||
|
// MARK: - Var
|
||||||
|
|
||||||
|
fileprivate let reuseIdentifier = "openSourceCell"
|
||||||
|
|
||||||
|
fileprivate var config: OpenSourceControllerConfig
|
||||||
|
|
||||||
|
fileprivate var downloadedLicence: [LicenceFile]
|
||||||
|
|
||||||
|
// MARK: - Lifecyle
|
||||||
|
|
||||||
|
init(downloadedLicence: [LicenceFile], config: OpenSourceControllerConfig) {
|
||||||
|
self.config = config
|
||||||
|
self.downloadedLicence = downloadedLicence
|
||||||
|
super.init(style: .plain)
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
self.prepareTableView()
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Prepare
|
||||||
|
|
||||||
|
fileprivate func prepareTableView() {
|
||||||
|
self.tableView.tableFooterView = UIView()
|
||||||
|
self.tableView.register(OpenSourceTableViewCell.self, forCellReuseIdentifier: self.reuseIdentifier)
|
||||||
|
self.tableView.dataSource = self
|
||||||
|
self.tableView.delegate = self
|
||||||
|
self.tableView.separatorStyle = .singleLine
|
||||||
|
self.tableView.backgroundColor = self.config.uiConfig.backgroundColor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension LicenceListViewController {
|
||||||
|
|
||||||
|
// MARK: - Table View Data Source
|
||||||
|
|
||||||
|
override func numberOfSections(in tableView: UITableView) -> Int {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||||
|
return self.downloadedLicence.count
|
||||||
|
}
|
||||||
|
|
||||||
|
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||||
|
var cell = tableView.dequeueReusableCell(withIdentifier: self.reuseIdentifier,
|
||||||
|
for: indexPath) as? OpenSourceTableViewCell
|
||||||
|
// Init cell
|
||||||
|
if cell == nil {
|
||||||
|
cell = OpenSourceTableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: self.reuseIdentifier)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure the cell with licence
|
||||||
|
if let licence = self.downloadedLicence.get(at: indexPath.row) {
|
||||||
|
cell?.configure(licence: licence, config: self.config)
|
||||||
|
}
|
||||||
|
|
||||||
|
return cell!
|
||||||
|
}
|
||||||
|
|
||||||
|
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
|
||||||
|
return UITableView.automaticDimension
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// LoadingViewController.swift
|
||||||
|
// OpenSourceControllerDemo
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 23/10/2018.
|
||||||
|
// Copyright © 2018 OpenSourceController. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
final class LoadingViewController: UIViewController {
|
||||||
|
|
||||||
|
// MARK: - Var
|
||||||
|
|
||||||
|
fileprivate lazy var activityIndicator: UIActivityIndicatorView = {
|
||||||
|
let activityIndicator = UIActivityIndicatorView(style: UIActivityIndicatorView.Style.gray)
|
||||||
|
activityIndicator.startAnimating()
|
||||||
|
return activityIndicator
|
||||||
|
}()
|
||||||
|
|
||||||
|
fileprivate var config: OpenSourceControllerConfig
|
||||||
|
|
||||||
|
// MARK: - Lifecycle
|
||||||
|
|
||||||
|
init(configuration: OpenSourceControllerConfig) {
|
||||||
|
self.config = configuration
|
||||||
|
super.init(nibName: nil, bundle: nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
self.view.backgroundColor = self.config.uiConfig.backgroundColor
|
||||||
|
|
||||||
|
self.view.addSubview(self.activityIndicator)
|
||||||
|
self.activityIndicator.pinCenter(to: self.view)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
//
|
||||||
|
// OpenSourceTableViewCell.swift
|
||||||
|
// Pods
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 05/02/2017.
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
final class OpenSourceTableViewCell: UITableViewCell {
|
||||||
|
|
||||||
|
// MARK: - Lifecycle
|
||||||
|
|
||||||
|
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||||||
|
super.init(style: .default, reuseIdentifier: reuseIdentifier)
|
||||||
|
self.prepareCellComponent()
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
super.init(coder: aDecoder)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Prepare
|
||||||
|
|
||||||
|
func prepareCellComponent() {
|
||||||
|
self.textLabel?.numberOfLines = 0
|
||||||
|
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) {
|
||||||
|
// Set text
|
||||||
|
self.textLabel?.attributedText = licence.attributedContent
|
||||||
|
self.textLabel?.textColor = config.uiConfig.licenceTextColor
|
||||||
|
|
||||||
|
// Background
|
||||||
|
if let backgroundColor = config.uiConfig.licenceBackgroundColor {
|
||||||
|
self.backgroundColor = backgroundColor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
//
|
||||||
|
// OpenSourceViewController.swift
|
||||||
|
// Pods
|
||||||
|
//
|
||||||
|
// Created by Florian Gabach on 05/02/2017.
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
final class OpenSourceViewController: UIViewController {
|
||||||
|
|
||||||
|
// MARK: - Var
|
||||||
|
|
||||||
|
fileprivate var showCloseButton: Bool
|
||||||
|
|
||||||
|
fileprivate var licences: [LicenceFile]
|
||||||
|
|
||||||
|
fileprivate var config: OpenSourceControllerConfig
|
||||||
|
|
||||||
|
fileprivate lazy var loadingController = {
|
||||||
|
return LoadingViewController(configuration: config)
|
||||||
|
}()
|
||||||
|
|
||||||
|
fileprivate lazy var closeButton: UIBarButtonItem = {
|
||||||
|
let closeButton = UIBarButtonItem(barButtonSystemItem: .stop, target: self, action: #selector(self.closePicker))
|
||||||
|
closeButton.tintColor = self.config.uiConfig.closeButtonColor ?? UIColor.black
|
||||||
|
return closeButton
|
||||||
|
}()
|
||||||
|
|
||||||
|
// MARK: - Lifecyle
|
||||||
|
|
||||||
|
init(licences: [LicenceFile], showCloseButton: Bool, configuration: OpenSourceControllerConfig) {
|
||||||
|
self.licences = licences
|
||||||
|
self.showCloseButton = showCloseButton
|
||||||
|
self.config = configuration
|
||||||
|
super.init(nibName: nil, bundle: nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
self.title = self.config.title
|
||||||
|
|
||||||
|
self.prepareCloseButton()
|
||||||
|
self.prepareStyle()
|
||||||
|
|
||||||
|
self.add(self.loadingController)
|
||||||
|
self.prepareLicences()
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Prepare
|
||||||
|
|
||||||
|
fileprivate func prepareStyle() {
|
||||||
|
// Apply navigation bar tint color if needed
|
||||||
|
if let tintColor = self.config.uiConfig.barTintColor {
|
||||||
|
self.navigationController?.navigationBar.barTintColor = tintColor
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply navigation bar text color if needed
|
||||||
|
if let textColor = self.config.uiConfig.titleColor {
|
||||||
|
let attribut = [NSAttributedString.Key.foregroundColor: textColor]
|
||||||
|
self.navigationController?.navigationBar.titleTextAttributes = attribut
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate func prepareLicences() {
|
||||||
|
LicenceLoader.downloadLicences(licences: licences, config: config) { [weak self] in
|
||||||
|
guard let strongSelf = self else { return }
|
||||||
|
let listController = LicenceListViewController(downloadedLicence: strongSelf.licences, config: strongSelf.config)
|
||||||
|
strongSelf.loadingController.remove()
|
||||||
|
strongSelf.add(listController)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate func prepareCloseButton() {
|
||||||
|
if showCloseButton {
|
||||||
|
self.navigationItem.rightBarButtonItem = closeButton
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Action
|
||||||
|
|
||||||
|
@objc fileprivate func closePicker() {
|
||||||
|
self.dismiss(animated: true, completion: nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user