Compare commits

..
15 Commits
Author SHA1 Message Date
Florian Gabach bc2e69440c Bump to 2.1.1 2017-12-10 15:18:17 +01:00
Florian Gabach 794d5a2d86 Fix podspec homepage 2017-12-10 14:39:33 +01:00
Florian Gabach c5beca03f7 Update pod meta 2017-12-10 14:32:17 +01:00
Florian Gabach 7ee4cfa0fd Clean 2017-12-10 14:30:58 +01:00
Florian Gabach 4dc34e956a Bump version 2017-12-10 14:29:07 +01:00
Florian Gabach 584e357f0e Allow to push controller 2017-12-10 14:28:56 +01:00
Florian Gabach 243ee49fc1 Add gitignore 2017-12-09 20:18:39 +01:00
Florian Gabach 5f53dbe6b5 Add carthage zip framework 2017-12-09 20:17:36 +01:00
Florian Gabach 97ceb32d29 Bump to 2.0.2 2017-12-08 16:11:26 +01:00
Florian Gabach 29ce192b5c Fix Carthage 2017-12-08 15:47:00 +01:00
Florian Gabach 6974e707dc Bump pod version 2017-12-08 15:02:03 +01:00
Florian Gabach b93d2f0d2a Bump to 2.0.1 2017-12-08 12:20:41 +01:00
Florian Gabach 2127942e5f Bump build system 2017-12-07 17:42:05 +01:00
Florian Gabach fd1107d42e Update README.md 2017-12-07 10:41:04 +01:00
Florian Gabach 1487636084 Update README.md 2017-11-22 21:09:29 +01:00
35 changed files with 1607 additions and 74 deletions
+43
View File
@@ -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/
+11
View File
@@ -1,5 +1,16 @@
Changelog Changelog
========== ==========
### 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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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>
@@ -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
Binary file not shown.
@@ -0,0 +1,4 @@
framework module OpenSourceController {
header "OpenSourceController-Swift.h"
requires objc
}
Binary file not shown.
@@ -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>
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildLocationStyle</key>
<string>UseAppPreferences</string>
<key>CustomBuildLocationType</key>
<string>RelativeToDerivedData</string>
<key>DerivedDataLocationStyle</key>
<string>Default</string>
<key>EnabledFullIndexStoreVisibility</key>
<false/>
<key>IssueFilterStyle</key>
<string>ShowActiveSchemeOnly</string>
<key>LiveSourceIssuesEnabled</key>
<true/>
</dict>
</plist>
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>OpenSourceControllerDemo.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
</dict>
</plist>
@@ -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,11 +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="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<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="13772"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/> <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>
@@ -37,10 +37,11 @@
<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="815.20000000000005" y="138.98050974512745"/>
</scene> </scene>
</scenes> </scenes>
</document> </document>
Binary file not shown.
+4 -4
View File
@@ -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 = '2.1.1'
s.summary = 'Display all the librarys licence used in your application. Enjoy !' s.summary = 'Display all the librarys licence used in your application. Enjoy !'
s.description = 'Display a screen with all licence used in your apply can be painful to maintain. OpenSourceController was built to respond to this problem. OpenSourceController is a simple parser to display the licences which are used in your application.' s.description = 'Display a screen with all licence used in your apply can be painful to maintain. OpenSourceController was built to respond to this problem. OpenSourceController is a simple parser to display the licences which are used in your application.'
s.homepage = 'https://github.com/terflogag/OpenSourceController' s.homepage = 'https://github.com/floriangbh/OpenSourceController'
s.license = { :type => 'MIT', :file => 'LICENSE' } s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'Florian Gabach' => 'contact@floriangabach.fr' } s.author = { 'Florian Gabach' => 'florian.gabach@gmail.com' }
s.source = { :git => 'https://github.com/terflogag/OpenSourceController.git', :tag => s.version.to_s } s.source = { :git => 'https://github.com/floriangbh/OpenSourceController.git', :tag => s.version.to_s }
s.ios.deployment_target = '9.0' s.ios.deployment_target = '9.0'
s.source_files = 'Sources/**/*' s.source_files = 'Sources/**/*'
end end
@@ -405,7 +405,7 @@
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";
@@ -428,7 +428,7 @@
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;
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildLocationStyle</key>
<string>UseAppPreferences</string>
<key>CustomBuildLocationType</key>
<string>RelativeToDerivedData</string>
<key>DerivedDataLocationStyle</key>
<string>Default</string>
<key>EnabledFullIndexStoreVisibility</key>
<false/>
<key>IssueFilterStyle</key>
<string>ShowActiveSchemeOnly</string>
<key>LiveSourceIssuesEnabled</key>
<true/>
</dict>
</plist>
+6 -3
View File
@@ -54,9 +54,9 @@ pod "OpenSourceController", '~> 1.0.8' # Swift 3.1 version
- To integrate OpenSourceController into your Xcode project using [Carthage](https://github.com/Carthage/Carthage), specify it in your Cartfile : - To integrate OpenSourceController into your Xcode project using [Carthage](https://github.com/Carthage/Carthage), specify it in your Cartfile :
```ruby ```ruby
github "terflogag/OpenSourceController" ~> 2.0 github "floriangbh/OpenSourceController" ~> 2.0
github "terflogag/OpenSourceController" ~> 1.0.8 # Swift 3.1 version github "floriangbh/OpenSourceController" ~> 1.0.8 # Swift 3.1 version
``` ```
## Usage ## Usage
@@ -81,6 +81,9 @@ url: "https://raw.githubusercontent.com/jessesquires/JSQMessagesViewController/d
// Present controller // Present controller
openSourceVC.presentOpenSourceController(from: self) openSourceVC.presentOpenSourceController(from: self)
// OR push the controller if the source controller is embeded in navigation controller
openSourceVC.pushOpenSourceController(from: self)
``` ```
## Customisation ## Customisation
@@ -131,7 +134,7 @@ What about yours ? If your application also use this library, feel free to cont
## Author ## Author
Florian Gabach, contact@floriangabach.fr Florian Gabach, florian.gabach@gmail.com
## License ## License
@@ -33,4 +33,26 @@ public class OpenSourceController: NSObject {
// Present controller // Present controller
from.present(navController, animated: true) from.present(navController, animated: true)
} }
/// Push OpenSourceViewController from navigation controller
///
/// - Parameter from: the source controller
open func pushOpenSourceController(from: UIViewController) {
// Create open source controller
let licenceController = OpenSourceViewController()
licenceController.showCloseButton = false // Don't show close button
// Init licence
licenceController.licences = self.licences
// Init config
licenceController.config = self.config
// Push controller
guard let navigationController = from.navigationController else {
print("Source controller isn't embeded in navigation controller. Can't push.")
return
}
navigationController.pushViewController(licenceController, animated: true)
}
} }
@@ -7,21 +7,34 @@
import UIKit import UIKit
class OpenSourceViewController: UITableViewController { class OpenSourceViewController: UITableViewController {
// MARK: - Var // MARK: - Var
/// Loading indicator /// Loading indicator
fileprivate var indicator = UIActivityIndicatorView() fileprivate lazy var indicator: UIActivityIndicatorView = {
let indicator = UIActivityIndicatorView(frame:CGRect(x: 0,
y: 0,
width: 40,
height: 40) )
indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
indicator.hidesWhenStopped = true
indicator.backgroundColor = UIColor.clear
indicator.color = UIColor.black
return indicator
}()
/// TableViewCell identifier /// TableViewCell identifier
private let reuseIdentifier = "openSourceCell" private let reuseIdentifier = "openSourceCell"
/// Contains all licence object before downloaded /// Contains all licence object before downloaded
internal var licences: [LicenceFile]? internal var licences: [LicenceFile]?
// Controller configuration for customization /// Controller configuration for customization
internal var config = OpenSourceControllerConfig() internal var config = OpenSourceControllerConfig()
/// Do we need to show the close button ? (disable if push the controller)
internal var showCloseButton: Bool = true
/// Contains all licences object after downloaded /// Contains all licences object after downloaded
fileprivate var downloadedLicence: [LicenceFile]? { fileprivate var downloadedLicence: [LicenceFile]? {
didSet { didSet {
@@ -32,37 +45,49 @@ class OpenSourceViewController: UITableViewController {
} }
} }
} }
// MARK: - Lifecyle // MARK: - Lifecyle
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
// Prepare tableview // Prepare controller
self.prepare()
}
// MARK: - Prepare
/// Prepare controller
fileprivate func prepare() {
self.prepareTableView() self.prepareTableView()
self.prepareActivityIndicator()
// Download licences
if showCloseButton {
self.prepareCloseButton()
}
self.prepareStyle()
self.prepareLicences() self.prepareLicences()
} }
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// MARK: - Prepare
/// Download licences /// Download licences
fileprivate func prepareLicences() { fileprivate func prepareLicences() {
if let licences = self.licences { self.startLoading()
self.startLoading()
LicenceDownloader.downloadLicences(licences: licences, // Retrieve licence
config: self.config) { () in guard let licences = self.licences else {
// Update licences print("No licences found.")
self.downloadedLicence = self.licences return
} }
// Download licence
LicenceDownloader.downloadLicences(licences: licences,
config: self.config) { () in
// Update licences
self.downloadedLicence = self.licences
} }
} }
/// Init tableView dataSource, delegate, bar button & title /// Init tableView dataSource, delegate, bar button & title
fileprivate func prepareTableView() { fileprivate func prepareTableView() {
// Common init // Common init
@@ -74,46 +99,51 @@ class OpenSourceViewController: UITableViewController {
self.tableView.dataSource = self self.tableView.dataSource = self
self.tableView.delegate = self self.tableView.delegate = self
self.tableView.separatorStyle = .singleLine self.tableView.separatorStyle = .singleLine
// Apply background color from configuration if needed
if let backgroundColor = self.config.uiConfig.backgroundColor { if let backgroundColor = self.config.uiConfig.backgroundColor {
self.tableView.backgroundColor = backgroundColor self.tableView.backgroundColor = backgroundColor
} }
}
// Navigation bar
/// Prepare controller style
fileprivate func prepareStyle() {
// Apply navigation bar tint color if needed
if let tintColor = self.config.uiConfig.barTintColor { if let tintColor = self.config.uiConfig.barTintColor {
self.navigationController?.navigationBar.barTintColor = tintColor self.navigationController?.navigationBar.barTintColor = tintColor
} }
// Applu navigation bar text color if needed
if let textColor = self.config.uiConfig.titleColor { if let textColor = self.config.uiConfig.titleColor {
let attribut = [NSAttributedStringKey.foregroundColor: textColor] let attribut = [NSAttributedStringKey.foregroundColor: textColor]
self.navigationController?.navigationBar.titleTextAttributes = attribut self.navigationController?.navigationBar.titleTextAttributes = attribut
} }
}
/// Prepare close button on navigation bar
fileprivate func prepareCloseButton() {
// Close button (on the right corner of navigation bar) // Close button (on the right corner of navigation bar)
let closeButton = UIBarButtonItem(barButtonSystemItem: .stop, let closeButton = UIBarButtonItem(barButtonSystemItem: .stop,
target: self, target: self,
action: #selector(self.closePicker)) action: #selector(self.closePicker))
closeButton.tintColor = config.uiConfig.closeButtonColor ?? UIColor.black closeButton.tintColor = config.uiConfig.closeButtonColor ?? UIColor.black
self.navigationItem.rightBarButtonItem = closeButton self.navigationItem.rightBarButtonItem = closeButton
// Loading indicator
self.prepareActivityIndicator()
} }
// MARK: - Loading indicator // MARK: - Loading indicator
/// Prepare UIActivityIndicatorView and display it at the center of the view /// Prepare UIActivityIndicatorView and display it at the center of the view
fileprivate func prepareActivityIndicator() { fileprivate func prepareActivityIndicator() {
self.indicator = UIActivityIndicatorView(frame:CGRect(x: 0, // Add to view
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) self.view.addSubview(indicator)
// Apply constraint
self.indicator.translatesAutoresizingMaskIntoConstraints = false
self.indicator.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
let topConstraint = self.navigationController?.navigationBar.frame.size.height ?? 0.0
self.indicator.bottomAnchor.constraint(equalTo: view.topAnchor, constant: topConstraint).isActive=true
} }
/// Start loading : start the loader animation /// Start loading : start the loader animation
fileprivate func startLoading() { fileprivate func startLoading() {
self.indicator.startAnimating() self.indicator.startAnimating()
@@ -122,7 +152,7 @@ class OpenSourceViewController: UITableViewController {
// Disable scroll // Disable scroll
self.tableView.isScrollEnabled = false self.tableView.isScrollEnabled = false
} }
/// Stop loading : stop and hide the loader /// Stop loading : stop and hide the loader
fileprivate func stopLoading() { fileprivate func stopLoading() {
self.indicator.stopAnimating() self.indicator.stopAnimating()
@@ -131,17 +161,17 @@ class OpenSourceViewController: UITableViewController {
// Enable scroll // Enable scroll
self.tableView.isScrollEnabled = true self.tableView.isScrollEnabled = true
} }
// MARK: - Table View Data Source // MARK: - Table View Data Source
override func numberOfSections(in tableView: UITableView) -> Int { override func numberOfSections(in tableView: UITableView) -> Int {
return 1 return 1
} }
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.downloadedLicence?.count ?? 0 return self.downloadedLicence?.count ?? 0
} }
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: self.reuseIdentifier, var cell = tableView.dequeueReusableCell(withIdentifier: self.reuseIdentifier,
for: indexPath) as? OpenSourceTableViewCell for: indexPath) as? OpenSourceTableViewCell
@@ -150,29 +180,29 @@ class OpenSourceViewController: UITableViewController {
cell = OpenSourceTableViewCell(style: UITableViewCellStyle.default, cell = OpenSourceTableViewCell(style: UITableViewCellStyle.default,
reuseIdentifier: self.reuseIdentifier) reuseIdentifier: self.reuseIdentifier)
} }
// Configure the cell with licence // Configure the cell with licence
if let licence = self.downloadedLicence?.get(at: indexPath.row) { if let licence = self.downloadedLicence?.get(at: indexPath.row) {
cell?.configure(licence: licence, config: self.config) cell?.configure(licence: licence, config: self.config)
} }
return cell! return cell!
} }
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
// Automatic dimension // Automatic dimension
return UITableViewAutomaticDimension return UITableViewAutomaticDimension
} }
// MARK: - Action // MARK: - Action
/// Handler for click on close button /// Handler for click on close button
@objc fileprivate func closePicker() { @objc fileprivate func closePicker() {
self.dismissController() self.dismissController()
} }
// MARK: - Navigation // MARK: - Navigation
/// Dismiss the OpenSourceController /// Dismiss the OpenSourceController
func dismissController() { func dismissController() {
DispatchQueue.main.async { [weak self] in DispatchQueue.main.async { [weak self] in
@@ -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.