Commit c333764b by xuning

初始化项目

parents
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>
<?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>
<?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>kfw_ios_fastservice.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>16</integer>
</dict>
</dict>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:FastService.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>
<?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>
//
// AppDelegate.h
// kfw_ios_fastservice
//
// Created by xuning on 1/31/24.
//
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@end
//
// AppDelegate.m
// kfw_ios_fastservice
//
// Created by xuning on 1/31/24.
//
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}
#pragma mark - UISceneSession lifecycle
- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
}
- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet<UISceneSession *> *)sceneSessions {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
@end
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
</document>
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>
//
// XVBaseNavController.h
// kfw_ios_fastservice
//
// Created by xuning on 1/31/24.
// Copyright © 2024 FastService. All rights reserved.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface XVBaseNavController : UINavigationController
@end
NS_ASSUME_NONNULL_END
//
// XVBaseNavController.m
// kfw_ios_fastservice
//
// Created by xuning on 1/31/24.
// Copyright © 2024 FastService. All rights reserved.
//
#import "XVBaseNavController.h"
@interface XVBaseNavController ()
@end
@implementation XVBaseNavController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
//
// XVBaseViewController.h
// kfw_ios_fastservice
//
// Created by xuning on 1/31/24.
// Copyright © 2024 FastService. All rights reserved.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface XVBaseViewController : UIViewController
@end
NS_ASSUME_NONNULL_END
//
// XVBaseViewController.m
// kfw_ios_fastservice
//
// Created by xuning on 1/31/24.
// Copyright © 2024 FastService. All rights reserved.
//
#import "XVBaseViewController.h"
@interface XVBaseViewController ()
@end
@implementation XVBaseViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
//
// PlaceholderTextView.h
// SaleHelper
//
// Created by gitBurning on 14/12/8.
// Copyright (c) 2014年 Burning_git. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface BRPlaceholderTextView : UITextView
@property(copy,nonatomic) NSString *placeholder;
@property(strong,nonatomic) NSIndexPath * indexPath;
//最大长度设置
@property(assign,nonatomic) NSInteger maxTextLength;
//更新高度的时候
@property(assign,nonatomic) float updateHeight;
/**
* 增加text 长度限制
*
* @param maxLength <#maxLength description#>
* @param limit <#limit description#>
*/
-(void)addMaxTextLengthWithMaxLength:(NSInteger)maxLength andEvent:(void(^)(BRPlaceholderTextView*text))limit;
/**
* 开始编辑 的 回调
*
* @param begin <#begin description#>
*/
-(void)addTextViewBeginEvent:(void(^)(BRPlaceholderTextView*text))begin;
/**
* 编辑 的 回调
*
* @param change <#begin description#>
*/
-(void)addTextViewDidChangeEvent:(void(^)(BRPlaceholderTextView*text))change;
/**
* 结束编辑 的 回调
*
* @param End <#begin description#>
*/
-(void)addTextViewEndEvent:(void(^)(BRPlaceholderTextView*text))End;
/**
* 设置Placeholder 颜色
*
* @param color <#color description#>
*/
-(void)setPlaceholderColor:(UIColor*)color;
/**
* 设置Placeholder 字体
*
* @param font <#font description#>
*/
-(void)setPlaceholderFont:(UIFont*)font;
/**
* 设置透明度
*
* @param opacity <#opacity description#>
*/
-(void)setPlaceholderOpacity:(float)opacity;
@end
//
// PlaceholderTextView.m
// SaleHelper
//
// Created by gitBurning on 14/12/8.
// Copyright (c) 2014年 Burning_git. All rights reserved.
//
#import "BRPlaceholderTextView.h"
#define kTopY 7.0
#define kLeftX 5.0
@interface BRPlaceholderTextView()<UITextViewDelegate>
@property(strong,nonatomic) UIColor *placeholder_color;
@property(strong,nonatomic) UIFont * placeholder_font;
/**
* 显示 Placeholder
*/
@property(strong,nonatomic,readonly) UILabel *PlaceholderLabel;
@property(assign,nonatomic) float placeholdeWidth;
@property(copy,nonatomic) id eventBlock;
@property(copy,nonatomic) id BeginBlock;
@property(copy,nonatomic) id ChangeBlock;
@property(copy,nonatomic) id EndBlock;
@end
@implementation BRPlaceholderTextView
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
#pragma mark - life cycle
- (id) initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
[self awakeFromNib];
}
return self;
}
- (void)awakeFromNib {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(DidChange:) name:UITextViewTextDidChangeNotification object:self];
//UITextViewTextDidBeginEditingNotification
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewBeginNoti:) name:UITextViewTextDidBeginEditingNotification object:self];
//UITextViewTextDidEndEditingNotification
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewEndNoti:) name:UITextViewTextDidEndEditingNotification object:self];
float left=kLeftX,top=kTopY,hegiht=30;
self.placeholdeWidth=CGRectGetWidth(self.frame)-2*left;
_PlaceholderLabel=[[UILabel alloc] initWithFrame:CGRectMake(left, top
, _placeholdeWidth, hegiht)];
_PlaceholderLabel.numberOfLines=0;
_PlaceholderLabel.lineBreakMode=NSLineBreakByCharWrapping|NSLineBreakByWordWrapping;
[self addSubview:_PlaceholderLabel];
[self defaultConfig];
}
-(void)layoutSubviews
{
float left=kLeftX,top=kTopY,hegiht=self.bounds.size.height;
self.placeholdeWidth=CGRectGetWidth(self.frame)-2*left;
CGRect frame=_PlaceholderLabel.frame;
frame.origin.x=left;
frame.origin.y=top;
frame.size.height=hegiht;
frame.size.width=self.placeholdeWidth;
_PlaceholderLabel.frame=frame;
[_PlaceholderLabel sizeToFit];
}
-(void)dealloc{
[_PlaceholderLabel removeFromSuperview];
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
#pragma mark - System Delegate
#pragma mark - custom Delegate
#pragma mark - Event response
-(void)defaultConfig
{
self.placeholder_color = [UIColor lightGrayColor];
self.placeholder_font = [UIFont systemFontOfSize:14];
self.maxTextLength=1000;
self.layoutManager.allowsNonContiguousLayout=NO;
}
-(void)addMaxTextLengthWithMaxLength:(NSInteger)maxLength andEvent:(void (^)(BRPlaceholderTextView *text))limit
{
if (maxLength>0) {
_maxTextLength=maxLength;
}
if (limit) {
_eventBlock=limit;
}
}
- (void)addTextViewDidChangeEvent:(void (^)(BRPlaceholderTextView *))change {
_ChangeBlock = change;
}
-(void)addTextViewBeginEvent:(void (^)(BRPlaceholderTextView *))begin{
_BeginBlock=begin;
}
-(void)addTextViewEndEvent:(void (^)(BRPlaceholderTextView *))End{
_EndBlock=End;
}
-(void)setUpdateHeight:(float)updateHeight{
CGRect frame=self.frame;
frame.size.height=updateHeight;
self.frame=frame;
_updateHeight=updateHeight;
}
//供外部使用的 api
-(void)setPlaceholderFont:(UIFont *)font
{
self.placeholder_font=font;
}
-(void)setPlaceholderColor:(UIColor *)color
{
self.placeholder_color=color;
}
-(void)setPlaceholderOpacity:(float)opacity
{
if (opacity<0) {
opacity=1;
}
self.PlaceholderLabel.layer.opacity=opacity;
}
#pragma mark - Noti Event
-(void)textViewBeginNoti:(NSNotification*)noti{
if (_BeginBlock) {
void(^begin)(BRPlaceholderTextView*text)=_BeginBlock;
begin(self);
}
}
-(void)textViewEndNoti:(NSNotification*)noti{
if (_EndBlock) {
void(^end)(BRPlaceholderTextView*text)=_EndBlock;
end(self);
}
}
-(void)DidChange:(NSNotification*)noti{
if (self.placeholder.length == 0 || [self.placeholder isEqualToString:@""]) {
_PlaceholderLabel.hidden=YES;
}
if (self.text.length > 0) {
_PlaceholderLabel.hidden=YES;
}
else{
_PlaceholderLabel.hidden=NO;
}
NSString *lang = [[self.nextResponder textInputMode] primaryLanguage]; // 键盘输入模式
if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [self markedTextRange];
//获取高亮部分
UITextPosition *position = [self positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
if (self.text.length > self.maxTextLength) {
self.text = [self.text substringToIndex:self.maxTextLength];
}
}
// 有高亮选择的字符串,则暂不对文字进行统计和限制
else{
}
}
// 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
else{
if (self.text.length > self.maxTextLength) {
self.text = [ self.text substringToIndex:self.maxTextLength];
}
}
if (_eventBlock && self.text.length > self.maxTextLength) {
void (^limint)(BRPlaceholderTextView*text) =_eventBlock;
limint(self);
}
if (_ChangeBlock && self.text.length <= self.maxTextLength) {
void(^change)(BRPlaceholderTextView*text)=_ChangeBlock;
change(self);
}
}
#pragma mark - private method
+(float)boundingRectWithSize:(CGSize)size withLabel:(NSString *)label withFont:(UIFont *)font{
NSDictionary *attribute = @{NSFontAttributeName:font};
// CGSize retSize;
CGSize retSize = [label boundingRectWithSize:size
options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading
attributes:attribute
context:nil].size;
return retSize.height;
}
#pragma mark - getters and Setters
-(void)setText:(NSString *)tex{
if (tex.length>0) {
_PlaceholderLabel.hidden=YES;
}
[super setText:tex];
}
-(void)setPlaceholder:(NSString *)placeholder{
if (placeholder.length == 0 || [placeholder isEqualToString:@""]) {
_PlaceholderLabel.hidden=YES;
}
else
{
_PlaceholderLabel.text=placeholder;
_placeholder=placeholder;
// float height= [BRPlaceholderTextView boundingRectWithSize:CGSizeMake(_placeholdeWidth, MAXFLOAT) withLabel:_placeholder withFont:_PlaceholderLabel.font];
// if (height>CGRectGetHeight(_PlaceholderLabel.frame) && height< CGRectGetHeight(self.frame)) {
//
// CGRect frame=_PlaceholderLabel.frame;
// frame.size.height=height;
// _PlaceholderLabel.frame=frame;
//
// }
}
}
-(void)setPlaceholder_font:(UIFont *)placeholder_font
{
_placeholder_font=placeholder_font;
_PlaceholderLabel.font=placeholder_font;
}
-(void)setPlaceholder_color:(UIColor *)placeholder_color
{
_placeholder_color=placeholder_color;
_PlaceholderLabel.textColor=placeholder_color;
}
@end
// The MIT License (MIT)
//
// Copyright (c) 2015-2016 forkingdog ( https://github.com/forkingdog )
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
#import <UIKit/UIKit.h>
/// "UINavigation+FDFullscreenPopGesture" extends UINavigationController's swipe-
/// to-pop behavior in iOS 7+ by supporting fullscreen pan gesture. Instead of
/// screen edge, you can now swipe from any place on the screen and the onboard
/// interactive pop transition works seamlessly.
///
/// Adding the implementation file of this category to your target will
/// automatically patch UINavigationController with this feature.
@interface UINavigationController (FDFullscreenPopGesture)
/// The gesture recognizer that actually handles interactive pop.
@property (nonatomic, strong, readonly) UIPanGestureRecognizer *fd_fullscreenPopGestureRecognizer;
/// A view controller is able to control navigation bar's appearance by itself,
/// rather than a global way, checking "fd_prefersNavigationBarHidden" property.
/// Default to YES, disable it if you don't want so.
@property (nonatomic, assign) BOOL fd_viewControllerBasedNavigationBarAppearanceEnabled;
@end
/// Allows any view controller to disable interactive pop gesture, which might
/// be necessary when the view controller itself handles pan gesture in some
/// cases.
@interface UIViewController (FDFullscreenPopGesture)
/// Whether the interactive pop gesture is disabled when contained in a navigation
/// stack.
@property (nonatomic, assign) BOOL fd_interactivePopDisabled;
/// Indicate this view controller prefers its navigation bar hidden or not,
/// checked when view controller based navigation bar's appearance is enabled.
/// Default to NO, bars are more likely to show.
@property (nonatomic, assign) BOOL fd_prefersNavigationBarHidden;
/// Max allowed initial distance to left edge when you begin the interactive pop
/// gesture. 0 by default, which means it will ignore this limit.
@property (nonatomic, assign) CGFloat fd_interactivePopMaxAllowedInitialDistanceToLeftEdge;
@end
//
// NSString+Unicode.h
// CodeLibary
//
// Created by zichaochu on 16/9/2.
// Copyright © 2016年 linxun. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSString (Unicode)
+ (NSString *)stringByReplacingUnicodeString:(NSString *)string;
@end
@interface NSArray (Unicode)
@end
@interface NSDictionary (Unicode)
@end
@interface NSSet (Unicode)
@end
//
// NSString+Unicode.m
// CodeLibary
//
// Created by zichaochu on 16/9/2.
// Copyright © 2016年 linxun. All rights reserved.
//
#import "NSString+Unicode.h"
#import <objc/runtime.h>
@implementation NSString (Unicode)
+ (NSString *)stringByReplacingUnicodeString:(NSString *)origin {
NSMutableString *string = [origin mutableCopy];
if (string.length > 0) {
[string replaceOccurrencesOfString:@"\\U" withString:@"\\u" options:0 range:NSMakeRange(0, string.length)];
CFStringRef transform = CFSTR("Any-Hex/Java");
CFStringTransform((__bridge CFMutableStringRef)string, NULL, transform, YES);
}
return string;
}
@end
@implementation NSArray (Unicode)
+ (void)load {
method_exchangeImplementations(class_getInstanceMethod([self class], @selector(description)), class_getInstanceMethod([self class], @selector(replaceDescription)));
method_exchangeImplementations(class_getInstanceMethod([self class], @selector(descriptionWithLocale:)), class_getInstanceMethod([self class], @selector(replaceDescriptionWithLocale:)));
method_exchangeImplementations(class_getInstanceMethod([self class], @selector(descriptionWithLocale:indent:)), class_getInstanceMethod([self class], @selector(replaceDescriptionWithLocale:indent:)));
}
- (NSString *)replaceDescription {
return [NSString stringByReplacingUnicodeString:[self replaceDescription]];
}
- (NSString *)replaceDescriptionWithLocale:(nullable id)locale {
return [NSString stringByReplacingUnicodeString:[self replaceDescriptionWithLocale:locale]];
}
- (NSString *)replaceDescriptionWithLocale:(nullable id)locale indent:(NSUInteger)level {
return [NSString stringByReplacingUnicodeString:[self replaceDescriptionWithLocale:locale indent:level]];
}
@end
@implementation NSDictionary (Unicode)
+ (void)load {
method_exchangeImplementations(class_getInstanceMethod([self class], @selector(description)), class_getInstanceMethod([self class], @selector(replaceDescription)));
method_exchangeImplementations(class_getInstanceMethod([self class], @selector(descriptionWithLocale:)), class_getInstanceMethod([self class], @selector(replaceDescriptionWithLocale:)));
method_exchangeImplementations(class_getInstanceMethod([self class], @selector(descriptionWithLocale:indent:)), class_getInstanceMethod([self class], @selector(replaceDescriptionWithLocale:indent:)));
}
- (NSString *)replaceDescription {
return [NSString stringByReplacingUnicodeString:[self replaceDescription]];
}
- (NSString *)replaceDescriptionWithLocale:(nullable id)locale {
return [NSString stringByReplacingUnicodeString:[self replaceDescriptionWithLocale:locale]];
}
- (NSString *)replaceDescriptionWithLocale:(nullable id)locale indent:(NSUInteger)level {
return [NSString stringByReplacingUnicodeString:[self replaceDescriptionWithLocale:locale indent:level]];
}
@end
@implementation NSSet (Unicode)
+ (void)load {
method_exchangeImplementations(class_getInstanceMethod([self class], @selector(description)), class_getInstanceMethod([self class], @selector(replaceDescription)));
method_exchangeImplementations(class_getInstanceMethod([self class], @selector(descriptionWithLocale:)), class_getInstanceMethod([self class], @selector(replaceDescriptionWithLocale:)));
method_exchangeImplementations(class_getInstanceMethod([self class], @selector(descriptionWithLocale:indent:)), class_getInstanceMethod([self class], @selector(replaceDescriptionWithLocale:indent:)));
}
- (NSString *)replaceDescription {
return [NSString stringByReplacingUnicodeString:[self replaceDescription]];
}
- (NSString *)replaceDescriptionWithLocale:(nullable id)locale {
return [NSString stringByReplacingUnicodeString:[self replaceDescriptionWithLocale:locale]];
}
- (NSString *)replaceDescriptionWithLocale:(nullable id)locale indent:(NSUInteger)level {
return [NSString stringByReplacingUnicodeString:[self replaceDescriptionWithLocale:locale indent:level]];
}
@end
//
// ImageCenterBtn.h
// ButtonTopImage
//
// Created by AliThink on 15/9/16.
// Copyright (c) 2015年 AliThink. All rights reserved.
//
// This code is distributed under the terms and conditions of the MIT license.
// Copyright (c) 2015 AliThink
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#import <UIKit/UIKit.h>
@interface ImageCenterButton : UIButton
// Round Image
@property BOOL imageIsRound;
// Image Padding
@property CGFloat padding;
// Spacing between imageview and textlabel
@property CGFloat imageTextSpace;
// Maximum imageview size
@property CGSize imageViewMaxSize;
// Button backgroundHighlighted
@property(nonatomic, strong) UIColor *backgroundHighlightedColor;
// Button backgroundNormal
@property(nonatomic, strong) UIColor *backgroundNormalColor;
@end
//
// ImageCenterBtn.m
// ButtonTopImage
//
// Created by AliThink on 15/9/16.
// Copyright (c) 2015年 AliThink. All rights reserved.
//
// This code is distributed under the terms and conditions of the MIT license.
// Copyright (c) 2015 AliThink
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#import "ImageCenterButton.h"
#define IMAGECENTERBUTTON_IMAGE_TEXT_SPACING 10.0
#define IMAGECENTERBUTTON_TITLE_MIN_HEIGHT 14.0
#define IMAGECENTERBUTTON_PADDING_MIN 8.0
@implementation ImageCenterButton
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
[self addAction];
}
return self;
}
- (instancetype)init {
self = [super init];
if (self) {
[self addAction];
}
return self;
}
- (void)addAction {
[self addTarget:self action:@selector(pressed:) forControlEvents:UIControlEventTouchDown];
[self addTarget:self action:@selector(touchUp:) forControlEvents:UIControlEventTouchUpInside];
[self addTarget:self action:@selector(touchUp:) forControlEvents:UIControlEventTouchUpOutside];
}
- (void)layoutSubviews {
[super layoutSubviews];
self.adjustsImageWhenHighlighted = NO;
if (!self.padding) {
self.padding = IMAGECENTERBUTTON_PADDING_MIN;
}
if (!self.imageTextSpace) {
self.imageTextSpace = IMAGECENTERBUTTON_IMAGE_TEXT_SPACING;
}
CGFloat titleLabelHeight = self.titleLabel.frame.size.height;
if (titleLabelHeight == 0) {
titleLabelHeight = IMAGECENTERBUTTON_TITLE_MIN_HEIGHT;
}
CGFloat imageMaxHeight = self.frame.size.height - titleLabelHeight - self.imageTextSpace - self.padding * 2;
CGFloat imageMaxWidth = self.frame.size.width - self.padding * 2;
if (self.imageViewMaxSize.height) {
imageMaxHeight = self.imageViewMaxSize.height;
}
if (self.imageViewMaxSize.width) {
imageMaxWidth = self.imageViewMaxSize.width;
}
//Set ImageView Threshold
if (self.imageView.frame.size.height > imageMaxHeight) {
CGRect newImageView = self.imageView.frame;
newImageView.size = CGSizeMake(imageMaxHeight / self.imageView.frame.size.height * self.imageView.frame.size.width, imageMaxHeight);
self.imageView.frame = newImageView;
}
if (self.imageView.frame.size.width > imageMaxWidth) {
CGRect newImageView = self.imageView.frame;
newImageView.size = CGSizeMake(imageMaxWidth , imageMaxWidth / self.imageView.frame.size.width * self.imageView.frame.size.height);
self.imageView.frame = newImageView;
}
CGFloat totalHeight = self.imageView.frame.size.height + self.imageTextSpace + titleLabelHeight;
//Center image
CGPoint center = self.imageView.center;
center.x = self.frame.size.width / 2.0;
center.y = self.frame.size.height / 2.0 - totalHeight / 2.0 + self.imageView.frame.size.height / 2.0;
self.imageView.center = center;
if (self.imageIsRound) {
self.imageView.layer.cornerRadius = self.imageView.frame.size.width / 2.0;
}
CGRect titleLabelFrame = self.titleLabel.frame;
titleLabelFrame.size = CGSizeMake(self.frame.size.width, titleLabelHeight);
self.titleLabel.frame = titleLabelFrame;
//Center text
CGPoint titleCenter = self.titleLabel.center;
titleCenter.x = self.frame.size.width / 2.0;
titleCenter.y = self.imageView.center.y + self.imageView.frame.size.height / 2.0 + self.imageTextSpace + titleLabelHeight / 2.0;
self.titleLabel.center = titleCenter;
self.titleLabel.textAlignment = NSTextAlignmentCenter;
}
- (void)pressed:(UIButton *)btn {
if (self.backgroundHighlightedColor) {
[btn setBackgroundColor:self.backgroundHighlightedColor];
} else {
[btn setBackgroundColor:[UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1]];
}
}
- (void)touchUp:(UIButton *)btn {
if (self.backgroundNormalColor) {
[btn setBackgroundColor:self.backgroundNormalColor];
} else {
[btn setBackgroundColor:[UIColor whiteColor]];
}
}
@end
//
// WRCustomNavigationBar.h
// CodeDemo
//
// Created by wangrui on 2017/10/22.
// Copyright © 2017年 wangrui. All rights reserved.
//
// Github地址:https://github.com/wangrui460/WRNavigationBar
#import <UIKit/UIKit.h>
@interface WRCustomNavigationBar : UIView
@property (nonatomic, copy) void(^onClickLeftButton)(void);
@property (nonatomic, copy) void(^onClickRightButton)(void);
@property (nonatomic, copy) NSString *title;
@property (nonatomic, strong) UIColor *titleLabelColor;
@property (nonatomic, strong) UIFont *titleLabelFont;
@property (nonatomic, strong) UIColor *barBackgroundColor;
@property (nonatomic, strong) UIImage *barBackgroundImage;
+ (instancetype)CustomNavigationBar;
- (void)wr_setBottomLineHidden:(BOOL)hidden;
- (void)wr_setBackgroundAlpha:(CGFloat)alpha;
- (void)wr_setTintColor:(UIColor *)color;
// 默认返回事件
//- (void)wr_setLeftButtonWithNormal:(UIImage *)normal highlighted:(UIImage *)highlighted title:(NSString *)title titleColor:(UIColor *)titleColor;
//- (void)wr_setLeftButtonWithImage:(UIImage *)image title:(NSString *)title titleColor:(UIColor *)titleColor;
- (void)wr_setLeftButtonWithNormal:(UIImage *)normal highlighted:(UIImage *)highlighted;
- (void)wr_setLeftButtonWithImage:(UIImage *)image;
- (void)wr_setLeftButtonWithTitle:(NSString *)title titleColor:(UIColor *)titleColor;
//- (void)wr_setRightButtonWithNormal:(UIImage *)normal highlighted:(UIImage *)highlighted title:(NSString *)title titleColor:(UIColor *)titleColor;
//- (void)wr_setRightButtonWithImage:(UIImage *)image title:(NSString *)title titleColor:(UIColor *)titleColor;
- (void)wr_setRightButtonWithNormal:(UIImage *)normal highlighted:(UIImage *)highlighted;
- (void)wr_setRightButtonWithImage:(UIImage *)image;
- (void)wr_setRightButtonWithTitle:(NSString *)title titleColor:(UIColor *)titleColor;
@end
//
// UINavigationBar+WRAddition.h
// StoryBoardDemo
//
// Created by wangrui on 2017/4/9.
// Copyright © 2017年 wangrui. All rights reserved.
//
// Github地址:https://github.com/wangrui460/WRNavigationBar
#import <UIKit/UIKit.h>
@class WRCustomNavigationBar;
@interface WRNavigationBar : UIView
+ (BOOL)isIphoneX;
+ (CGFloat)navBarBottom;
+ (CGFloat)tabBarHeight;
+ (CGFloat)screenWidth;
+ (CGFloat)screenHeight;
@end
#pragma mark - Default
@interface WRNavigationBar (WRDefault)
/// 局部使用该库 待开发
//+ (void)wr_local;
/// 广泛使用该库 default 暂时是默认, wr_local 完成后,wr_local就会变成默认
+ (void)wr_widely;
/// 局部使用该库时,设置需要用到的控制器 待开发
//+ (void)wr_setWhitelist:(NSArray<NSString *> *)list;
/// 广泛使用该库时,设置需要屏蔽的控制器
+ (void)wr_setBlacklist:(NSArray<NSString *> *)list;
/** set default barTintColor of UINavigationBar */
+ (void)wr_setDefaultNavBarBarTintColor:(UIColor *)color;
/** set default barBackgroundImage of UINavigationBar */
/** warning: wr_setDefaultNavBarBackgroundImage is deprecated! place use WRCustomNavigationBar */
//+ (void)wr_setDefaultNavBarBackgroundImage:(UIImage *)image;
/** set default tintColor of UINavigationBar */
+ (void)wr_setDefaultNavBarTintColor:(UIColor *)color;
/** set default titleColor of UINavigationBar */
+ (void)wr_setDefaultNavBarTitleColor:(UIColor *)color;
/** set default statusBarStyle of UIStatusBar */
+ (void)wr_setDefaultStatusBarStyle:(UIStatusBarStyle)style;
/** set default shadowImage isHidden of UINavigationBar */
+ (void)wr_setDefaultNavBarShadowImageHidden:(BOOL)hidden;
@end
#pragma mark - UINavigationBar
@interface UINavigationBar (WRAddition) <UINavigationBarDelegate>
/** 设置导航栏所有BarButtonItem的透明度 */
- (void)wr_setBarButtonItemsAlpha:(CGFloat)alpha hasSystemBackIndicator:(BOOL)hasSystemBackIndicator;
/** 设置导航栏在垂直方向上平移多少距离 */
- (void)wr_setTranslationY:(CGFloat)translationY;
/** 获取当前导航栏在垂直方向上偏移了多少 */
- (CGFloat)wr_getTranslationY;
@end
#pragma mark - UIViewController
@interface UIViewController (WRAddition)
/** record current ViewController navigationBar backgroundImage */
/** warning: wr_setDefaultNavBarBackgroundImage is deprecated! place use WRCustomNavigationBar */
//- (void)wr_setNavBarBackgroundImage:(UIImage *)image;
- (UIImage *)wr_navBarBackgroundImage;
/** record current ViewController navigationBar barTintColor */
- (void)wr_setNavBarBarTintColor:(UIColor *)color;
- (UIColor *)wr_navBarBarTintColor;
/** record current ViewController navigationBar backgroundAlpha */
- (void)wr_setNavBarBackgroundAlpha:(CGFloat)alpha;
- (CGFloat)wr_navBarBackgroundAlpha;
/** record current ViewController navigationBar tintColor */
- (void)wr_setNavBarTintColor:(UIColor *)color;
- (UIColor *)wr_navBarTintColor;
/** record current ViewController titleColor */
- (void)wr_setNavBarTitleColor:(UIColor *)color;
- (UIColor *)wr_navBarTitleColor;
/** record current ViewController statusBarStyle */
- (void)wr_setStatusBarStyle:(UIStatusBarStyle)style;
- (UIStatusBarStyle)wr_statusBarStyle;
/** record current ViewController navigationBar shadowImage hidden */
- (void)wr_setNavBarShadowImageHidden:(BOOL)hidden;
- (BOOL)wr_navBarShadowImageHidden;
/** record current ViewController custom navigationBar */
/** warning: wr_setDefaultNavBarBackgroundImage is deprecated! place use WRCustomNavigationBar */
//- (void)wr_setCustomNavBar:(WRCustomNavigationBar *)navBar;
@end
<?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>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>SceneDelegate</string>
<key>UISceneStoryboardFile</key>
<string>Main</string>
</dict>
</array>
</dict>
</dict>
</dict>
</plist>
//
// SceneDelegate.h
// kfw_ios_fastservice
//
// Created by xuning on 1/31/24.
//
#import <UIKit/UIKit.h>
@interface SceneDelegate : UIResponder <UIWindowSceneDelegate>
@property (strong, nonatomic) UIWindow * window;
@end
//
// SceneDelegate.m
// kfw_ios_fastservice
//
// Created by xuning on 1/31/24.
//
#import "SceneDelegate.h"
@interface SceneDelegate ()
@end
@implementation SceneDelegate
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
}
- (void)sceneDidDisconnect:(UIScene *)scene {
// Called as the scene is being released by the system.
// This occurs shortly after the scene enters the background, or when its session is discarded.
// Release any resources associated with this scene that can be re-created the next time the scene connects.
// The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
}
- (void)sceneDidBecomeActive:(UIScene *)scene {
// Called when the scene has moved from an inactive state to an active state.
// Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
}
- (void)sceneWillResignActive:(UIScene *)scene {
// Called when the scene will move from an active state to an inactive state.
// This may occur due to temporary interruptions (ex. an incoming phone call).
}
- (void)sceneWillEnterForeground:(UIScene *)scene {
// Called as the scene transitions from the background to the foreground.
// Use this method to undo the changes made on entering the background.
}
- (void)sceneDidEnterBackground:(UIScene *)scene {
// Called as the scene transitions from the foreground to the background.
// Use this method to save data, release shared resources, and store enough scene-specific state information
// to restore the scene back to its current state.
}
@end
//
// main.m
// kfw_ios_fastservice
//
// Created by xuning on 1/31/24.
//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
NSString * appDelegateClassName;
@autoreleasepool {
// Setup code that might create autoreleased objects goes here.
appDelegateClassName = NSStringFromClass([AppDelegate class]);
}
return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}
//
// kfw_ios_fastserviceTests.m
// kfw_ios_fastserviceTests
//
// Created by xuning on 1/31/24.
//
#import <XCTest/XCTest.h>
@interface kfw_ios_fastserviceTests : XCTestCase
@end
@implementation kfw_ios_fastserviceTests
- (void)setUp {
// Put setup code here. This method is called before the invocation of each test method in the class.
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
- (void)testExample {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
- (void)testPerformanceExample {
// This is an example of a performance test case.
[self measureBlock:^{
// Put the code you want to measure the time of here.
}];
}
@end
//
// kfw_ios_fastserviceUITests.m
// kfw_ios_fastserviceUITests
//
// Created by xuning on 1/31/24.
//
#import <XCTest/XCTest.h>
@interface kfw_ios_fastserviceUITests : XCTestCase
@end
@implementation kfw_ios_fastserviceUITests
- (void)setUp {
// Put setup code here. This method is called before the invocation of each test method in the class.
// In UI tests it is usually best to stop immediately when a failure occurs.
self.continueAfterFailure = NO;
// In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
- (void)testExample {
// UI tests must launch the application that they test.
XCUIApplication *app = [[XCUIApplication alloc] init];
[app launch];
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
- (void)testLaunchPerformance {
if (@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *)) {
// This measures how long it takes to launch your application.
[self measureWithMetrics:@[[[XCTApplicationLaunchMetric alloc] init]] block:^{
[[[XCUIApplication alloc] init] launch];
}];
}
}
@end
//
// kfw_ios_fastserviceUITestsLaunchTests.m
// kfw_ios_fastserviceUITests
//
// Created by xuning on 1/31/24.
//
#import <XCTest/XCTest.h>
@interface kfw_ios_fastserviceUITestsLaunchTests : XCTestCase
@end
@implementation kfw_ios_fastserviceUITestsLaunchTests
+ (BOOL)runsForEachTargetApplicationUIConfiguration {
return YES;
}
- (void)setUp {
self.continueAfterFailure = NO;
}
- (void)testLaunch {
XCUIApplication *app = [[XCUIApplication alloc] init];
[app launch];
// Insert steps here to perform after app launch but before taking a screenshot,
// such as logging into a test account or navigating somewhere in the app
XCTAttachment *attachment = [XCTAttachment attachmentWithScreenshot:XCUIScreen.mainScreen.screenshot];
attachment.name = @"Launch Screen";
attachment.lifetime = XCTAttachmentLifetimeKeepAlways;
[self addAttachment:attachment];
}
@end
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
source 'https://github.com/CocoaPods/Specs.git'
target 'kfw_ios_fastservice' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
pod 'AFNetworking'
pod 'Masonry'
pod 'MJRefresh'
pod 'YYKit'
pod 'MJExtension'
pod 'SDWebImage'
pod 'SAMKeychain'
pod 'MBProgressHUD'
pod 'LEEAlert'
pod 'AvoidCrash'
pod 'DZNEmptyDataSet'
pod 'BRPickerView'
pod "UINavigation-SXFixSpace"
pod 'Bugly'
pod 'BMKLocationKit'
pod 'BaiduNaviKit-All/Map', '6.4.0' # 集成地图Map包
pod 'BaiduNaviKit-All/Navi', '6.4.0' # 集成Navi包
pod 'BaiduNaviKit-All/WalkNavi', '6.4.0' # 集成WalkNavi包
# pod 'BaiduNaviKit-All/TTS', '6.0.0' # 集成TTS包
pod 'BaiduNaviKit-All/Search', '6.4.0' # 集成地图Search包
# pod 'BaiduNaviKit-All/Cloud', '6.0.0' # 集成地图Cloud包
pod 'BaiduNaviKit-All/Utils', '6.4.0' # 集成地图Utils包
target 'kfw_ios_fastserviceTests' do
inherit! :search_paths
# Pods for testing
end
target 'kfw_ios_fastserviceUITests' do
# Pods for testing
end
end
PODS:
- AFNetworking (4.0.1):
- AFNetworking/NSURLSession (= 4.0.1)
- AFNetworking/Reachability (= 4.0.1)
- AFNetworking/Security (= 4.0.1)
- AFNetworking/Serialization (= 4.0.1)
- AFNetworking/UIKit (= 4.0.1)
- AFNetworking/NSURLSession (4.0.1):
- AFNetworking/Reachability
- AFNetworking/Security
- AFNetworking/Serialization
- AFNetworking/Reachability (4.0.1)
- AFNetworking/Security (4.0.1)
- AFNetworking/Serialization (4.0.1)
- AFNetworking/UIKit (4.0.1):
- AFNetworking/NSURLSession
- AvoidCrash (2.5.2)
- BaiduNaviKit-All/Base (6.4.0)
- BaiduNaviKit-All/Map (6.4.0):
- BaiduNaviKit-All/Base
- BaiduNaviKit-All/Navi (6.4.0):
- BaiduNaviKit-All/Map
- BaiduNaviKit-All/Search (6.4.0):
- BaiduNaviKit-All/Base
- BaiduNaviKit-All/Utils (6.4.0):
- BaiduNaviKit-All/Base
- BaiduNaviKit-All/WalkNavi (6.4.0):
- BaiduNaviKit-All/Map
- BMKLocationKit (2.0.6)
- BRPickerView (2.8.0):
- BRPickerView/AddressPickerView (= 2.8.0)
- BRPickerView/Base (= 2.8.0)
- BRPickerView/DatePickerView (= 2.8.0)
- BRPickerView/StringPickerView (= 2.8.0)
- BRPickerView/AddressPickerView (2.8.0):
- BRPickerView/Base
- BRPickerView/Base (2.8.0)
- BRPickerView/DatePickerView (2.8.0):
- BRPickerView/Base
- BRPickerView/StringPickerView (2.8.0):
- BRPickerView/Base
- Bugly (2.5.93)
- DZNEmptyDataSet (1.8.1)
- LEEAlert (1.6.4)
- Masonry (1.1.0)
- MBProgressHUD (1.2.0)
- MJExtension (3.4.1)
- MJRefresh (3.7.5)
- SAMKeychain (1.5.3)
- SDWebImage (5.15.2):
- SDWebImage/Core (= 5.15.2)
- SDWebImage/Core (5.15.2)
- UINavigation-SXFixSpace (1.2.4)
- YYKit (1.0.9):
- YYKit/no-arc (= 1.0.9)
- YYKit/no-arc (1.0.9)
DEPENDENCIES:
- AFNetworking
- AvoidCrash
- BaiduNaviKit-All/Map (= 6.4.0)
- BaiduNaviKit-All/Navi (= 6.4.0)
- BaiduNaviKit-All/Search (= 6.4.0)
- BaiduNaviKit-All/Utils (= 6.4.0)
- BaiduNaviKit-All/WalkNavi (= 6.4.0)
- BMKLocationKit
- BRPickerView
- Bugly
- DZNEmptyDataSet
- LEEAlert
- Masonry
- MBProgressHUD
- MJExtension
- MJRefresh
- SAMKeychain
- SDWebImage
- UINavigation-SXFixSpace
- YYKit
SPEC REPOS:
https://github.com/CocoaPods/Specs.git:
- AFNetworking
- AvoidCrash
- BaiduNaviKit-All
- BMKLocationKit
- BRPickerView
- Bugly
- DZNEmptyDataSet
- LEEAlert
- Masonry
- MBProgressHUD
- MJExtension
- MJRefresh
- SAMKeychain
- SDWebImage
- UINavigation-SXFixSpace
- YYKit
SPEC CHECKSUMS:
AFNetworking: 3bd23d814e976cd148d7d44c3ab78017b744cd58
AvoidCrash: 28c6916fe19bd2b84126b8dec7cbe61c9a12741d
BaiduNaviKit-All: 3024385b17c2d024e6be53d0ef46d4b50b032214
BMKLocationKit: 058df3f51b379be4b2865ee19bfb58c32398dc8a
BRPickerView: a0ff460bf092bc069db5a54153395b1f7e8f5300
Bugly: b8715e6ec4004b7f7fbffab0643ba80545aee3da
DZNEmptyDataSet: 9525833b9e68ac21c30253e1d3d7076cc828eaa7
LEEAlert: a604ad481e3e9b021421a271f78594926dd034bb
Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
MBProgressHUD: 3ee5efcc380f6a79a7cc9b363dd669c5e1ae7406
MJExtension: 21c5f6f8c4d5d8844b7ae8fbae08fed0b501f961
MJRefresh: fdf5e979eb406a0341468932d1dfc8b7f9fce961
SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c
SDWebImage: 8ab87d4b3e5cc4927bd47f78db6ceb0b94442577
UINavigation-SXFixSpace: 10f223253ebff2ceefa26694e23b7694269763c4
YYKit: 7cda43304a8dc3696c449041e2cb3107b4e236e7
PODFILE CHECKSUM: 707a9f75067f2737529bdb707d00e5248f0dc1e2
COCOAPODS: 1.11.3
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment