Commit d4365b60 authored by 曹云霄's avatar 曹云霄

Palmwms第一版开发结束,待测试

parent fc451cf9
...@@ -31,8 +31,7 @@ ...@@ -31,8 +31,7 @@
29D7651B1D6F322A0005CA21 /* UserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 29D7651A1D6F322A0005CA21 /* UserViewController.m */; }; 29D7651B1D6F322A0005CA21 /* UserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 29D7651A1D6F322A0005CA21 /* UserViewController.m */; };
29D7651F1D6F33800005CA21 /* ChangePasswordTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 29D7651E1D6F33800005CA21 /* ChangePasswordTableViewCell.m */; }; 29D7651F1D6F33800005CA21 /* ChangePasswordTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 29D7651E1D6F33800005CA21 /* ChangePasswordTableViewCell.m */; };
29D765221D6F33920005CA21 /* LogoutTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 29D765211D6F33920005CA21 /* LogoutTableViewCell.m */; }; 29D765221D6F33920005CA21 /* LogoutTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 29D765211D6F33920005CA21 /* LogoutTableViewCell.m */; };
29D765261D6F35570005CA21 /* UserHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 29D765251D6F35570005CA21 /* UserHeaderView.m */; }; 29DC842F1D6FD9A100F377C3 /* ChangepassWordTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 29DC842E1D6FD9A100F377C3 /* ChangepassWordTableViewController.m */; };
29D765281D6F355F0005CA21 /* UserHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 29D765271D6F355F0005CA21 /* UserHeaderView.xib */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
...@@ -81,9 +80,8 @@ ...@@ -81,9 +80,8 @@
29D7651E1D6F33800005CA21 /* ChangePasswordTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChangePasswordTableViewCell.m; sourceTree = "<group>"; }; 29D7651E1D6F33800005CA21 /* ChangePasswordTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChangePasswordTableViewCell.m; sourceTree = "<group>"; };
29D765201D6F33920005CA21 /* LogoutTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LogoutTableViewCell.h; sourceTree = "<group>"; }; 29D765201D6F33920005CA21 /* LogoutTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LogoutTableViewCell.h; sourceTree = "<group>"; };
29D765211D6F33920005CA21 /* LogoutTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LogoutTableViewCell.m; sourceTree = "<group>"; }; 29D765211D6F33920005CA21 /* LogoutTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LogoutTableViewCell.m; sourceTree = "<group>"; };
29D765241D6F35570005CA21 /* UserHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserHeaderView.h; sourceTree = "<group>"; }; 29DC842D1D6FD9A100F377C3 /* ChangepassWordTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChangepassWordTableViewController.h; sourceTree = "<group>"; };
29D765251D6F35570005CA21 /* UserHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserHeaderView.m; sourceTree = "<group>"; }; 29DC842E1D6FD9A100F377C3 /* ChangepassWordTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChangepassWordTableViewController.m; sourceTree = "<group>"; };
29D765271D6F355F0005CA21 /* UserHeaderView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UserHeaderView.xib; sourceTree = "<group>"; };
29FDC0501D6DB20800561E4F /* urlInformation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = urlInformation.h; sourceTree = "<group>"; }; 29FDC0501D6DB20800561E4F /* urlInformation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = urlInformation.h; sourceTree = "<group>"; };
2A3092547F488EFD2FBE5F24 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = "<group>"; }; 2A3092547F488EFD2FBE5F24 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = "<group>"; };
B94AB6672F835AEC7D22B9F4 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = "<group>"; }; B94AB6672F835AEC7D22B9F4 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = "<group>"; };
...@@ -155,10 +153,11 @@ ...@@ -155,10 +153,11 @@
2970D1911D6D7DB000ADB311 /* User */ = { 2970D1911D6D7DB000ADB311 /* User */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
29D765231D6F35370005CA21 /* Views */,
29D7651C1D6F32C00005CA21 /* Cells */, 29D7651C1D6F32C00005CA21 /* Cells */,
29D765191D6F322A0005CA21 /* UserViewController.h */, 29D765191D6F322A0005CA21 /* UserViewController.h */,
29D7651A1D6F322A0005CA21 /* UserViewController.m */, 29D7651A1D6F322A0005CA21 /* UserViewController.m */,
29DC842D1D6FD9A100F377C3 /* ChangepassWordTableViewController.h */,
29DC842E1D6FD9A100F377C3 /* ChangepassWordTableViewController.m */,
); );
path = User; path = User;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -287,16 +286,6 @@ ...@@ -287,16 +286,6 @@
path = Cells; path = Cells;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
29D765231D6F35370005CA21 /* Views */ = {
isa = PBXGroup;
children = (
29D765241D6F35570005CA21 /* UserHeaderView.h */,
29D765251D6F35570005CA21 /* UserHeaderView.m */,
29D765271D6F355F0005CA21 /* UserHeaderView.xib */,
);
path = Views;
sourceTree = "<group>";
};
4D1268B5A77B318DE79E83B0 /* Frameworks */ = { 4D1268B5A77B318DE79E83B0 /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
...@@ -374,7 +363,6 @@ ...@@ -374,7 +363,6 @@
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
29D765281D6F355F0005CA21 /* UserHeaderView.xib in Resources */,
29CF91861D66B8CC00AE13A8 /* LaunchScreen.storyboard in Resources */, 29CF91861D66B8CC00AE13A8 /* LaunchScreen.storyboard in Resources */,
2970D1891D6D7C1000ADB311 /* Images.xcassets in Resources */, 2970D1891D6D7C1000ADB311 /* Images.xcassets in Resources */,
29CF91831D66B8CC00AE13A8 /* Assets.xcassets in Resources */, 29CF91831D66B8CC00AE13A8 /* Assets.xcassets in Resources */,
...@@ -443,11 +431,11 @@ ...@@ -443,11 +431,11 @@
29CAE20C1D6ED4BF0011CCE6 /* UserPaopaoView.m in Sources */, 29CAE20C1D6ED4BF0011CCE6 /* UserPaopaoView.m in Sources */,
290DAADD1D6E8276005F5085 /* CoordinateAcquisitionViewController.m in Sources */, 290DAADD1D6E8276005F5085 /* CoordinateAcquisitionViewController.m in Sources */,
29CF917B1D66B8CC00AE13A8 /* AppDelegate.m in Sources */, 29CF917B1D66B8CC00AE13A8 /* AppDelegate.m in Sources */,
29DC842F1D6FD9A100F377C3 /* ChangepassWordTableViewController.m in Sources */,
29D7651B1D6F322A0005CA21 /* UserViewController.m in Sources */, 29D7651B1D6F322A0005CA21 /* UserViewController.m in Sources */,
290DAAE01D6E8296005F5085 /* DeliveryTrackingViewController.m in Sources */, 290DAAE01D6E8296005F5085 /* DeliveryTrackingViewController.m in Sources */,
2970D1AC1D6D991100ADB311 /* UIView+Corners.m in Sources */, 2970D1AC1D6D991100ADB311 /* UIView+Corners.m in Sources */,
2970D1B01D6D9CB300ADB311 /* palmwms_objc_json_client.m in Sources */, 2970D1B01D6D9CB300ADB311 /* palmwms_objc_json_client.m in Sources */,
29D765261D6F35570005CA21 /* UserHeaderView.m in Sources */,
29D765221D6F33920005CA21 /* LogoutTableViewCell.m in Sources */, 29D765221D6F33920005CA21 /* LogoutTableViewCell.m in Sources */,
29D7651F1D6F33800005CA21 /* ChangePasswordTableViewCell.m in Sources */, 29D7651F1D6F33800005CA21 /* ChangePasswordTableViewCell.m in Sources */,
290DAAE31D6E9259005F5085 /* MainViewController.m in Sources */, 290DAAE31D6E9259005F5085 /* MainViewController.m in Sources */,
......
...@@ -19,6 +19,31 @@ ...@@ -19,6 +19,31 @@
- (void)customBackButton:(SEL)backButtonClick; - (void)customBackButton:(SEL)backButtonClick;
/**
* 保存账号密码
*
* @param account 账号
* @param passWord 密码
*/
+ (void)saveAccountAndPassWord:(NSString *)account AndPassword:(NSString *)passWord;
/**
* 注销删除账号密码
*/
+ (void)deleteAccountAndPassWord;
/**
* SheetView确认框
*/
- (void)showSheetViewWithMessage:(NSString *)message complete:(void(^)())finish;
- (void)CreateMBProgressHUDLoding:(NSString *)text; - (void)CreateMBProgressHUDLoding:(NSString *)text;
- (void)RemoveMBProgressHUDLoding; - (void)RemoveMBProgressHUDLoding;
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
self.automaticallyAdjustsScrollViewInsets = NO; self.automaticallyAdjustsScrollViewInsets = NO;
self.navigationController.navigationBar.translucent = NO; self.navigationController.navigationBar.translucent = NO;
self.navigationController.navigationBar.barTintColor = MainColor; self.navigationController.navigationBar.barTintColor = MainColor;
[self.navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17],NSForegroundColorAttributeName:[UIColor whiteColor]}]; [self.navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:20],NSForegroundColorAttributeName:[UIColor whiteColor]}];
} }
...@@ -52,9 +52,6 @@ ...@@ -52,9 +52,6 @@
self.navigationItem.leftBarButtonItem = backButton; self.navigationItem.leftBarButtonItem = backButton;
} }
#pragma mark -渐隐提示框回调 #pragma mark -渐隐提示框回调
- (void)SHOWPrompttext:(NSString *)Text ComcpleteBlock:(void(^)())completed - (void)SHOWPrompttext:(NSString *)Text ComcpleteBlock:(void(^)())completed
{ {
...@@ -121,7 +118,6 @@ ...@@ -121,7 +118,6 @@
complete(); complete();
} }
}); });
} }
#pragma mark -显示信息的提示框 #pragma mark -显示信息的提示框
...@@ -170,6 +166,38 @@ ...@@ -170,6 +166,38 @@
return storyboard; return storyboard;
} }
#pragma mark - 用户确认框
- (void)showSheetViewWithMessage:(NSString *)message complete:(void (^)())finish
{
UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:nil message:message preferredStyle:UIAlertControllerStyleActionSheet];
[alertVC addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]];
[alertVC addAction:[UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
finish();
}]];
[self presentViewController:alertVC animated:YES completion:nil];
}
#pragma mark - 保存账号密码
+ (void)saveAccountAndPassWord:(NSString *)account AndPassword:(NSString *)passWord
{
if ([SSKeychain setPassword:account forService:SERVICENAME account:SAVEACCOUNT]) {
NSLog(@"保存账号成功");
}
if ([SSKeychain setPassword:passWord forService:SERVICENAME account:SAVEPASSWORD]) {
NSLog(@"保存密码成功");
}
}
#pragma mark - 删除账号密码
+ (void)deleteAccountAndPassWord
{
if ([SSKeychain deletePasswordForService:SERVICENAME account:SAVEPASSWORD]) {
NSLog(@"删除密码成功");
}
if ([SSKeychain deletePasswordForService:SERVICENAME account:SAVEACCOUNT]) {
NSLog(@"删除账号成功");
}
}
......
...@@ -14,6 +14,20 @@ ...@@ -14,6 +14,20 @@
@implementation LoginViewController @implementation LoginViewController
- (void)viewWillAppear:(BOOL)animated
{
//取出账户密码
self.userNameTextField.text = [SSKeychain passwordForService:SERVICENAME account:SAVEACCOUNT];
self.passWordTextField.text = [SSKeychain passwordForService:SERVICENAME account:SAVEPASSWORD];
if ([self.userNameTextField.text length]) {
[self changeColor:self.userNameTextField];
}
if ([self.passWordTextField.text length]) {
[self changeColor:self.passWordTextField];
}
}
- (void)viewWillDisappear:(BOOL)animated - (void)viewWillDisappear:(BOOL)animated
{ {
[UIApplication sharedApplication].statusBarHidden = NO; [UIApplication sharedApplication].statusBarHidden = NO;
...@@ -32,16 +46,9 @@ ...@@ -32,16 +46,9 @@
[self.userNameTextField addTarget:self action:@selector(userNameTextFieldInput:) forControlEvents:UIControlEventEditingDidBegin | UIControlEventEditingChanged]; [self.userNameTextField addTarget:self action:@selector(userNameTextFieldInput:) forControlEvents:UIControlEventEditingDidBegin | UIControlEventEditingChanged];
[self.passWordTextField addTarget:self action:@selector(userNameTextFieldInput:) forControlEvents:UIControlEventEditingDidBegin | UIControlEventEditingChanged]; [self.passWordTextField addTarget:self action:@selector(userNameTextFieldInput:) forControlEvents:UIControlEventEditingDidBegin | UIControlEventEditingChanged];
[self.loginButton addTarget:self action:@selector(loginButtonClickAction:) forControlEvents:UIControlEventTouchUpInside]; [self.loginButton addTarget:self action:@selector(loginButtonClickAction:) forControlEvents:UIControlEventTouchUpInside];
if ([self.userNameTextField.text length]) {
[self changeColor:self.userNameTextField];
}
if ([self.passWordTextField.text length]) {
[self changeColor:self.passWordTextField];
}
} }
#pragma mark - 检测实时输入 #pragma mark - 检测实时输入
- (void)userNameTextFieldInput:(UITextField *)textField - (void)userNameTextFieldInput:(UITextField *)textField
{ {
...@@ -91,6 +98,7 @@ ...@@ -91,6 +98,7 @@
user.userName = driver[@"name"]; user.userName = driver[@"name"];
user.userCode = driver[@"code"]; user.userCode = driver[@"code"];
user.userUUid = driver[@"id"]; user.userUUid = driver[@"id"];
[[weakSelf class] saveAccountAndPassWord:self.userNameTextField.text AndPassword:self.passWordTextField.text];
[weakSelf SuccessMBProgressView:@"登录成功" timeDelay:1.0f finish:^{ [weakSelf SuccessMBProgressView:@"登录成功" timeDelay:1.0f finish:^{
[weakSelf enterTheMainController]; [weakSelf enterTheMainController];
}]; }];
...@@ -124,6 +132,4 @@ ...@@ -124,6 +132,4 @@
@end @end
...@@ -211,23 +211,25 @@ ...@@ -211,23 +211,25 @@
- (IBAction)CoordinateAcquisitionButtonClick:(UIButton *)sender { - (IBAction)CoordinateAcquisitionButtonClick:(UIButton *)sender {
WS(weakSelf); WS(weakSelf);
[self CreateMBProgressHUDLoding:@"上传采集点数据中"]; [self showSheetViewWithMessage:@"请确认是否上传该采集点数据?" complete:^{
NSString *string = [NSString stringWithFormat:@"customer/saveCoordinate/%@?lat=%lf&lng=%lf",self.currentUser.fid,[UserInforMation manager].latitude,[UserInforMation manager].longitude]; [weakSelf CreateMBProgressHUDLoding:@"上传采集点数据中"];
[[NetworkRequestClassManager Manager] NetworkWithDictionaryRequestWithURL:SERVERREQUESTURL(string) WithRequestType:1 WithParameter:nil WithReturnValueBlock:^(id returnValue) { NSString *string = [NSString stringWithFormat:@"customer/saveCoordinate/%@?lat=%lf&lng=%lf",self.currentUser.fid,[UserInforMation manager].latitude,[UserInforMation manager].longitude];
[[NetworkRequestClassManager Manager] NetworkWithDictionaryRequestWithURL:SERVERREQUESTURL(string) WithRequestType:1 WithParameter:nil WithReturnValueBlock:^(id returnValue) {
[weakSelf RemoveMBProgressHUDLoding];
if ([returnValue[@"code"] isEqualToNumber:@0]) { [weakSelf RemoveMBProgressHUDLoding];
[weakSelf SuccessMBProgressView:@"上传成功" timeDelay:1.0f finish:nil]; if ([returnValue[@"code"] isEqualToNumber:@0]) {
}else [weakSelf SuccessMBProgressView:@"上传成功" timeDelay:1.0f finish:nil];
{ }else
[weakSelf SHOWPrompttext:returnValue[@"message"]]; {
} [weakSelf SHOWPrompttext:returnValue[@"message"]];
} WithErrorCodeBlock:^(id errorCodeValue) { }
[weakSelf RemoveMBProgressHUDLoding]; } WithErrorCodeBlock:^(id errorCodeValue) {
[weakSelf SHOWPrompttext:NETWORK]; [weakSelf RemoveMBProgressHUDLoding];
} WithFailureBlock:^(NSError *error) { [weakSelf SHOWPrompttext:NETWORK];
[weakSelf RemoveMBProgressHUDLoding]; } WithFailureBlock:^(NSError *error) {
[weakSelf SHOWPrompttext:error.localizedDescription]; [weakSelf RemoveMBProgressHUDLoding];
[weakSelf SHOWPrompttext:error.localizedDescription];
}];
}]; }];
} }
......
// //
// UserHeaderView.h // ChangepassWordTableViewController.h
// Palmwms // Palmwms
// //
// Created by 曹云霄 on 16/8/25. // Created by 曹云霄 on 16/8/26.
// Copyright © 2016年 上海勾芒科技有限公司. All rights reserved. // Copyright © 2016年 上海勾芒科技有限公司. All rights reserved.
// //
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
@interface UserHeaderView : UIView @interface ChangepassWordTableViewController : UITableViewController
/**
* 初始化
*
*/
+ (instancetype)initializeHeaderView;
@end @end
//
// ChangepassWordTableViewController.m
// Palmwms
//
// Created by 曹云霄 on 16/8/26.
// Copyright © 2016年 上海勾芒科技有限公司. All rights reserved.
//
#import "ChangepassWordTableViewController.h"
#import "MBProgressHUD.h"
@interface ChangepassWordTableViewController ()
/**
* 当前密码
*/
@property (weak, nonatomic) IBOutlet UITextField *oldPassWordTextField;
/**
* 新密码
*/
@property (weak, nonatomic) IBOutlet UITextField *NewPassWordTextField;
/**
* 确认新密码
*/
@property (weak, nonatomic) IBOutlet UITextField *sureNewPassWordTextField;
/**
* 确认修改
*/
@property (weak, nonatomic) IBOutlet UIButton *sureChangeButton;
@end
@implementation ChangepassWordTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self customBackButton:@selector(backButtonClick:)];
[self uiConfigAction];
}
#pragma mark - 自定义返回按钮
- (void)customBackButton:(SEL)backButtonClick
{
UIBarButtonItem *backButton = [[UIBarButtonItem alloc]initWithImage:LOADIMAGENAME(@"back") style:UIBarButtonItemStyleDone target:self action:backButtonClick];
self.navigationItem.leftBarButtonItem = backButton;
}
#pragma mark - UI
- (void)uiConfigAction
{
[self.sureChangeButton addCorners];
}
#pragma mark - 确认修改密码
- (IBAction)changePassWordButtonClickAction:(UIButton *)sender {
if (![self.oldPassWordTextField.text length]) {
[self SHOWPrompttext:@"当前密码不能为空"];return;
}
if (![self.NewPassWordTextField.text length]) {
[self SHOWPrompttext:@"新密码不能为空"];return;
}
if (![self.sureNewPassWordTextField.text length]) {
[self SHOWPrompttext:@"确认新密码不能为空"];return;
}
if (![self.NewPassWordTextField.text isEqualToString:self.sureNewPassWordTextField.text]) {
[self SHOWPrompttext:@"两次密码不一致"];return;
}
ModifyPasswordRequest *changePassWord = [[ModifyPasswordRequest alloc]init];
changePassWord.driverId = [UserInforMation manager].userUUid;
changePassWord.oldPassword = self.oldPassWordTextField.text;
changePassWord.fnewPassword = self.NewPassWordTextField.text;
WS(weakSelf);
[[NetworkRequestClassManager Manager] NetworkRequestWithURL:SERVERREQUESTURL(CHANGEPASSWORD) WithRequestType:0 WithParameter:changePassWord WithReturnValueBlock:^(id returnValue) {
if ([returnValue[@"code"] isEqualToNumber:@0]) {
//更新账号密码
[BaseViewController saveAccountAndPassWord:[UserInforMation manager].userName AndPassword:self.NewPassWordTextField.text];
[weakSelf SuccessMBProgressView:@"密码修改成功" timeDelay:2.0f finish:^{
[weakSelf.navigationController popViewControllerAnimated:YES];
}];
}else
{
[weakSelf SHOWPrompttext:returnValue[@"message"]];
}
} WithErrorCodeBlock:^(id errorCodeValue) {
[weakSelf SHOWPrompttext:NETWORK];
} WithFailureBlock:^(NSError *error) {
[weakSelf SHOWPrompttext:error.localizedDescription];
}];
}
#pragma mark -渐隐提示框
- (void)SHOWPrompttext:(NSString *)Text
{
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeText;
hud.label.text = Text;
hud.contentColor = MainColor;
hud.offset = CGPointMake(0.f, MBProgressMaxOffset);
[hud hideAnimated:YES afterDelay:2.0f];
}
#pragma mark -显示成功的提示框
- (void)SuccessMBProgressView:(NSString *)successString timeDelay:(NSTimeInterval)time finish:(void (^)())complete
{
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
UIImage *image = [[UIImage imageNamed:@"Checkmark"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
hud.customView = imageView;
hud.contentColor = MainColor;
hud.label.font = [UIFont systemFontOfSize:18];
hud.mode = MBProgressHUDModeCustomView;
hud.label.text = successString;
[hud hideAnimated:YES afterDelay:time];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if (complete) {
complete();
}
});
}
#pragma mark - 返回
- (void)backButtonClick:(UIBarButtonItem *)item
{
[self.navigationController popViewControllerAnimated:YES];
}
@end
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#import "UserViewController.h" #import "UserViewController.h"
#import "ChangePasswordTableViewCell.h" #import "ChangePasswordTableViewCell.h"
#import "LogoutTableViewCell.h" #import "LogoutTableViewCell.h"
#import "UserHeaderView.h"
@interface UserViewController ()<UITableViewDelegate,UITableViewDataSource> @interface UserViewController ()<UITableViewDelegate,UITableViewDataSource>
...@@ -18,6 +17,21 @@ ...@@ -18,6 +17,21 @@
*/ */
@property (weak, nonatomic) IBOutlet UITableView *userTableView; @property (weak, nonatomic) IBOutlet UITableView *userTableView;
/**
* 用户名
*/
@property (weak, nonatomic) IBOutlet UILabel *userNameLabel;
/**
* code
*/
@property (weak, nonatomic) IBOutlet UILabel *passWordLabel;
/**
* 头像
*/
@property (weak, nonatomic) IBOutlet UIImageView *headerImageView;
@end @end
...@@ -35,12 +49,11 @@ ...@@ -35,12 +49,11 @@
{ {
[self customBackButton:@selector(backButtonClick:)]; [self customBackButton:@selector(backButtonClick:)];
self.userTableView.tableFooterView = [UIView new]; self.userTableView.tableFooterView = [UIView new];
//headerView self.userNameLabel.text = [NSString stringWithFormat:@"用户名:%@",[UserInforMation manager].userName];
UIView *header = [[UIView alloc]initWithFrame:CGRectMake(0, 0,self.view.mj_w, 180)]; self.passWordLabel.text = [NSString stringWithFormat:@"代码:%@",[UserInforMation manager].userCode];
[header addSubview:[UserHeaderView initializeHeaderView]];
self.userTableView.tableHeaderView = header;
} }
#pragma mark - <UITableViewDataSource,UITableViewDelegate> #pragma mark - <UITableViewDataSource,UITableViewDelegate>
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{ {
...@@ -75,8 +88,12 @@ ...@@ -75,8 +88,12 @@
[tableView deselectRowAtIndexPath:indexPath animated:YES]; [tableView deselectRowAtIndexPath:indexPath animated:YES];
if (indexPath.section == 1) { if (indexPath.section == 1) {
self.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; WS(weakSelf);
[self dismissViewControllerAnimated:YES completion:nil]; [self showSheetViewWithMessage:@"请确认是否注销账号?" complete:^{
[[weakSelf class] deleteAccountAndPassWord];
self.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self dismissViewControllerAnimated:YES completion:nil];
}];
} }
} }
......
//
// UserHeaderView.m
// Palmwms
//
// Created by 曹云霄 on 16/8/25.
// Copyright © 2016年 上海勾芒科技有限公司. All rights reserved.
//
#import "UserHeaderView.h"
@implementation UserHeaderView
+ (instancetype)initializeHeaderView
{
return [[[NSBundle mainBundle] loadNibNamed:@"UserHeaderView" owner:nil options:nil] firstObject];
}
@end
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15G31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="iN0-l3-epB" customClass="UserHeaderView">
<rect key="frame" x="0.0" y="0.0" width="375" height="180"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="headerBackground" id="2eg-cw-XSn">
<rect key="frame" x="0.0" y="0.0" width="375" height="180"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="header" id="ipn-lt-zTc">
<rect key="frame" x="71" y="60" width="60" height="60"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="用户:admin" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="7ZS-RI-Qwl">
<rect key="frame" x="157" y="64" width="218" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="15"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="代码:ssasas" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="0i7-Zo-EKp">
<rect key="frame" x="157" y="95" width="218" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="15"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="253.5" y="201"/>
</view>
</objects>
<resources>
<image name="header" width="57" height="57"/>
<image name="headerBackground" width="314" height="200"/>
</resources>
</document>
This diff is collapsed.
...@@ -82,5 +82,20 @@ ...@@ -82,5 +82,20 @@
*/ */
#define BAIDUMAPKEY @"jcdvG3LHQF9NQ2wTncWibQKv6w7zsD70" #define BAIDUMAPKEY @"jcdvG3LHQF9NQ2wTncWibQKv6w7zsD70"
/**
保存账号密码serviceName
*/
#define SERVICENAME @"Palmwms"
/**
保存账号key
*/
#define SAVEACCOUNT @"account"
/**
保存密码key
*/
#define SAVEPASSWORD @"passWord"
#endif /* MacroDefinition_h */ #endif /* MacroDefinition_h */
...@@ -22,6 +22,9 @@ ...@@ -22,6 +22,9 @@
#import "palmwms_objc_json_client.h" #import "palmwms_objc_json_client.h"
#import "NetworkRequestClassManager.h" #import "NetworkRequestClassManager.h"
#import "UserInforMation.h" #import "UserInforMation.h"
#import "BaseViewController.h"
#import "SSKeychain.h"
#import "SSKeychainQuery.h"
// Include any system framework and library headers here that should be included in all compilation units. // Include any system framework and library headers here that should be included in all compilation units.
// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file. // You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.
......
...@@ -21,6 +21,10 @@ ...@@ -21,6 +21,10 @@
*/ */
#define QUERY @"customer/query" #define QUERY @"customer/query"
/**
* 修改密码
*/
#define CHANGEPASSWORD @"driver/modifyPassword"
#endif /* urlInformation_h */ #endif /* urlInformation_h */
...@@ -24,6 +24,7 @@ PODS: ...@@ -24,6 +24,7 @@ PODS:
- SDWebImage (3.7.6): - SDWebImage (3.7.6):
- SDWebImage/Core (= 3.7.6) - SDWebImage/Core (= 3.7.6)
- SDWebImage/Core (3.7.6) - SDWebImage/Core (3.7.6)
- SSKeychain (1.4.1)
DEPENDENCIES: DEPENDENCIES:
- AFNetworking (~> 3.1.0) - AFNetworking (~> 3.1.0)
...@@ -35,6 +36,7 @@ DEPENDENCIES: ...@@ -35,6 +36,7 @@ DEPENDENCIES:
- MBProgressHUD (~> 1.0.0) - MBProgressHUD (~> 1.0.0)
- MJRefresh (~> 3.1.12) - MJRefresh (~> 3.1.12)
- SDWebImage (~> 3.7.5) - SDWebImage (~> 3.7.5)
- SSKeychain (~> 1.4.1)
SPEC CHECKSUMS: SPEC CHECKSUMS:
AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67 AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67
...@@ -46,5 +48,6 @@ SPEC CHECKSUMS: ...@@ -46,5 +48,6 @@ SPEC CHECKSUMS:
MBProgressHUD: 4890f671c94e8a0f3cf959aa731e9de2f036d71a MBProgressHUD: 4890f671c94e8a0f3cf959aa731e9de2f036d71a
MJRefresh: b96cdb21c4aa75a7b07654311ab2f315c497e806 MJRefresh: b96cdb21c4aa75a7b07654311ab2f315c497e806
SDWebImage: c325cf02c30337336b95beff20a13df489ec0ec9 SDWebImage: c325cf02c30337336b95beff20a13df489ec0ec9
SSKeychain: 55cc80f66f5c73da827e3077f02e43528897db41
COCOAPODS: 0.39.0 COCOAPODS: 0.39.0
../../../SSKeychain/Sources/SSKeychain.h
\ No newline at end of file
../../../SSKeychain/Sources/SSKeychainQuery.h
\ No newline at end of file
../../../SSKeychain/Sources/SSKeychain.h
\ No newline at end of file
../../../SSKeychain/Sources/SSKeychainQuery.h
\ No newline at end of file
...@@ -24,6 +24,7 @@ PODS: ...@@ -24,6 +24,7 @@ PODS:
- SDWebImage (3.7.6): - SDWebImage (3.7.6):
- SDWebImage/Core (= 3.7.6) - SDWebImage/Core (= 3.7.6)
- SDWebImage/Core (3.7.6) - SDWebImage/Core (3.7.6)
- SSKeychain (1.4.1)
DEPENDENCIES: DEPENDENCIES:
- AFNetworking (~> 3.1.0) - AFNetworking (~> 3.1.0)
...@@ -35,6 +36,7 @@ DEPENDENCIES: ...@@ -35,6 +36,7 @@ DEPENDENCIES:
- MBProgressHUD (~> 1.0.0) - MBProgressHUD (~> 1.0.0)
- MJRefresh (~> 3.1.12) - MJRefresh (~> 3.1.12)
- SDWebImage (~> 3.7.5) - SDWebImage (~> 3.7.5)
- SSKeychain (~> 1.4.1)
SPEC CHECKSUMS: SPEC CHECKSUMS:
AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67 AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67
...@@ -46,5 +48,6 @@ SPEC CHECKSUMS: ...@@ -46,5 +48,6 @@ SPEC CHECKSUMS:
MBProgressHUD: 4890f671c94e8a0f3cf959aa731e9de2f036d71a MBProgressHUD: 4890f671c94e8a0f3cf959aa731e9de2f036d71a
MJRefresh: b96cdb21c4aa75a7b07654311ab2f315c497e806 MJRefresh: b96cdb21c4aa75a7b07654311ab2f315c497e806
SDWebImage: c325cf02c30337336b95beff20a13df489ec0ec9 SDWebImage: c325cf02c30337336b95beff20a13df489ec0ec9
SSKeychain: 55cc80f66f5c73da827e3077f02e43528897db41
COCOAPODS: 0.39.0 COCOAPODS: 0.39.0
This source diff could not be displayed because it is too large. You can view the blob instead.
Copyright (c) 2010-2016 Sam Soffes, http://soff.es
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.
# SSKeychain
SSKeychain is a simple wrapper for accessing accounts, getting passwords, setting passwords, and deleting passwords using the system Keychain on Mac OS X and iOS.
## Adding to Your Project
Simply add the following to your Podfile if you're using CocoaPods:
``` ruby
pod 'SSKeychain'
```
or Cartfile if you're using Carthage:
```
github "soffes/SSKeychain"
```
To manually add to your project:
1. Add `Security.framework` to your target
2. Add `SSKeychain.h`, `SSKeychain.m`, `SSKeychainQuery.h`, and `SSKeychainQuery.m` to your project.
SSKeychain requires ARC.
Note: Currently SSKeychain does not support Mac OS 10.6.
## Working with the Keychain
SSKeychain has the following class methods for working with the system keychain:
```objective-c
+ (NSArray *)allAccounts;
+ (NSArray *)accountsForService:(NSString *)serviceName;
+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;
+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account;
+ (void)setAccessibilityType:(CFTypeRef)accessibilityType;
+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;
```
Easy as that. (See [SSKeychain.h](https://github.com/soffes/sskeychain/blob/master/SSKeychain/SSKeychain.h) and [SSKeychainQuery.h](https://github.com/soffes/sskeychain/blob/master/SSKeychain/SSKeychainQuery.h) for all of the methods.)
## Documentation
### Use prepared documentation
Read the [online documentation](http://cocoadocs.org/docsets/SSKeychain).
## Debugging
If your saving to the keychain fails, use the NSError object to handle it. You can invoke `[error code]` to get the numeric error code. A few values are defined in SSKeychain.h, and the rest in SecBase.h.
```objective-c
NSError *error = nil;
SSKeychainQuery *query = [[SSKeychainQuery alloc] init];
query.service = @"MyService";
query.account = @"soffes";
[query fetch:&error];
if ([error code] == errSecItemNotFound) {
NSLog(@"Password not found");
} else if (error != nil) {
NSLog(@"Some other error occurred: %@", [error localizedDescription]);
}
```
Obviously, you should do something more sophisticated. You can just call `[error localizedDescription]` if all you need is the error message.
## Disclaimer
Working with the keychain is pretty sucky. You should really check for errors and failures. This library doesn't make it any more stable, it just wraps up all of the annoying C APIs.
You also really should not use the default but set the `accessibilityType`.
`kSecAttrAccessibleWhenUnlocked` should work for most applications. See
[Apple Documentation](https://developer.apple.com/library/ios/DOCUMENTATION/Security/Reference/keychainservices/Reference/reference.html#//apple_ref/doc/constant_group/Keychain_Item_Accessibility_Constants)
for other options.
## Thanks
This was originally inspired by EMKeychain and SDKeychain (both of which are now gone). Thanks to the authors. SSKeychain has since switched to a simpler implementation that was abstracted from [SSToolkit](http://sstoolk.it).
A huge thanks to [Caleb Davenport](https://github.com/calebd) for leading the way on version 1.0 of SSKeychain.
//
// SSKeychain.h
// SSKeychain
//
// Created by Sam Soffes on 5/19/10.
// Copyright (c) 2010-2014 Sam Soffes. All rights reserved.
//
#if __has_feature(modules)
@import Foundation;
#else
#import <Foundation/Foundation.h>
#endif
/**
Error code specific to SSKeychain that can be returned in NSError objects.
For codes returned by the operating system, refer to SecBase.h for your
platform.
*/
typedef NS_ENUM(OSStatus, SSKeychainErrorCode) {
/** Some of the arguments were invalid. */
SSKeychainErrorBadArguments = -1001,
};
/** SSKeychain error domain */
extern NSString *const kSSKeychainErrorDomain;
/** Account name. */
extern NSString *const kSSKeychainAccountKey;
/**
Time the item was created.
The value will be a string.
*/
extern NSString *const kSSKeychainCreatedAtKey;
/** Item class. */
extern NSString *const kSSKeychainClassKey;
/** Item description. */
extern NSString *const kSSKeychainDescriptionKey;
/** Item label. */
extern NSString *const kSSKeychainLabelKey;
/** Time the item was last modified.
The value will be a string.
*/
extern NSString *const kSSKeychainLastModifiedKey;
/** Where the item was created. */
extern NSString *const kSSKeychainWhereKey;
/**
Simple wrapper for accessing accounts, getting passwords, setting passwords, and deleting passwords using the system
Keychain on Mac OS X and iOS.
This was originally inspired by EMKeychain and SDKeychain (both of which are now gone). Thanks to the authors.
SSKeychain has since switched to a simpler implementation that was abstracted from [SSToolkit](http://sstoolk.it).
*/
@interface SSKeychain : NSObject
#pragma mark - Classic methods
/**
Returns a string containing the password for a given account and service, or `nil` if the Keychain doesn't have a
password for the given parameters.
@param serviceName The service for which to return the corresponding password.
@param account The account for which to return the corresponding password.
@return Returns a string containing the password for a given account and service, or `nil` if the Keychain doesn't
have a password for the given parameters.
*/
+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;
+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none)));
/**
Returns a nsdata containing the password for a given account and service, or `nil` if the Keychain doesn't have a
password for the given parameters.
@param serviceName The service for which to return the corresponding password.
@param account The account for which to return the corresponding password.
@return Returns a nsdata containing the password for a given account and service, or `nil` if the Keychain doesn't
have a password for the given parameters.
*/
+ (NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account;
+ (NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none)));
/**
Deletes a password from the Keychain.
@param serviceName The service for which to delete the corresponding password.
@param account The account for which to delete the corresponding password.
@return Returns `YES` on success, or `NO` on failure.
*/
+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account;
+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none)));
/**
Sets a password in the Keychain.
@param password The password to store in the Keychain.
@param serviceName The service for which to set the corresponding password.
@param account The account for which to set the corresponding password.
@return Returns `YES` on success, or `NO` on failure.
*/
+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;
+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none)));
/**
Sets a password in the Keychain.
@param password The password to store in the Keychain.
@param serviceName The service for which to set the corresponding password.
@param account The account for which to set the corresponding password.
@return Returns `YES` on success, or `NO` on failure.
*/
+ (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account;
+ (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error __attribute__((swift_error(none)));
/**
Returns an array containing the Keychain's accounts, or `nil` if the Keychain has no accounts.
See the `NSString` constants declared in SSKeychain.h for a list of keys that can be used when accessing the
dictionaries returned by this method.
@return An array of dictionaries containing the Keychain's accounts, or `nil` if the Keychain doesn't have any
accounts. The order of the objects in the array isn't defined.
*/
+ (NSArray<NSDictionary<NSString *, id> *> *)allAccounts;
+ (NSArray<NSDictionary<NSString *, id> *> *)allAccounts:(NSError *__autoreleasing *)error __attribute__((swift_error(none)));
/**
Returns an array containing the Keychain's accounts for a given service, or `nil` if the Keychain doesn't have any
accounts for the given service.
See the `NSString` constants declared in SSKeychain.h for a list of keys that can be used when accessing the
dictionaries returned by this method.
@param serviceName The service for which to return the corresponding accounts.
@return An array of dictionaries containing the Keychain's accounts for a given `serviceName`, or `nil` if the Keychain
doesn't have any accounts for the given `serviceName`. The order of the objects in the array isn't defined.
*/
+ (NSArray<NSDictionary<NSString *, id> *> *)accountsForService:(NSString *)serviceName;
+ (NSArray<NSDictionary<NSString *, id> *> *)accountsForService:(NSString *)serviceName error:(NSError *__autoreleasing *)error __attribute__((swift_error(none)));
#pragma mark - Configuration
#if __IPHONE_4_0 && TARGET_OS_IPHONE
/**
Returns the accessibility type for all future passwords saved to the Keychain.
@return Returns the accessibility type.
The return value will be `NULL` or one of the "Keychain Item Accessibility
Constants" used for determining when a keychain item should be readable.
@see setAccessibilityType
*/
+ (CFTypeRef)accessibilityType;
/**
Sets the accessibility type for all future passwords saved to the Keychain.
@param accessibilityType One of the "Keychain Item Accessibility Constants"
used for determining when a keychain item should be readable.
If the value is `NULL` (the default), the Keychain default will be used which
is highly insecure. You really should use at least `kSecAttrAccessibleAfterFirstUnlock`
for background applications or `kSecAttrAccessibleWhenUnlocked` for all
other applications.
@see accessibilityType
*/
+ (void)setAccessibilityType:(CFTypeRef)accessibilityType;
#endif
@end
#import <SSKeychain/SSKeychainQuery.h>
//
// SSKeychain.m
// SSKeychain
//
// Created by Sam Soffes on 5/19/10.
// Copyright (c) 2010-2014 Sam Soffes. All rights reserved.
//
#import "SSKeychain.h"
#import "SSKeychainQuery.h"
NSString *const kSSKeychainErrorDomain = @"com.samsoffes.sskeychain";
NSString *const kSSKeychainAccountKey = @"acct";
NSString *const kSSKeychainCreatedAtKey = @"cdat";
NSString *const kSSKeychainClassKey = @"labl";
NSString *const kSSKeychainDescriptionKey = @"desc";
NSString *const kSSKeychainLabelKey = @"labl";
NSString *const kSSKeychainLastModifiedKey = @"mdat";
NSString *const kSSKeychainWhereKey = @"svce";
#if __IPHONE_4_0 && TARGET_OS_IPHONE
static CFTypeRef SSKeychainAccessibilityType = NULL;
#endif
@implementation SSKeychain
+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account {
return [self passwordForService:serviceName account:account error:nil];
}
+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account error:(NSError *__autoreleasing *)error {
SSKeychainQuery *query = [[SSKeychainQuery alloc] init];
query.service = serviceName;
query.account = account;
[query fetch:error];
return query.password;
}
+ (NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account {
return [self passwordDataForService:serviceName account:account error:nil];
}
+ (NSData *)passwordDataForService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error {
SSKeychainQuery *query = [[SSKeychainQuery alloc] init];
query.service = serviceName;
query.account = account;
[query fetch:error];
return query.passwordData;
}
+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account {
return [self deletePasswordForService:serviceName account:account error:nil];
}
+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account error:(NSError *__autoreleasing *)error {
SSKeychainQuery *query = [[SSKeychainQuery alloc] init];
query.service = serviceName;
query.account = account;
return [query deleteItem:error];
}
+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account {
return [self setPassword:password forService:serviceName account:account error:nil];
}
+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError *__autoreleasing *)error {
SSKeychainQuery *query = [[SSKeychainQuery alloc] init];
query.service = serviceName;
query.account = account;
query.password = password;
return [query save:error];
}
+ (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account {
return [self setPasswordData:password forService:serviceName account:account error:nil];
}
+ (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName account:(NSString *)account error:(NSError **)error {
SSKeychainQuery *query = [[SSKeychainQuery alloc] init];
query.service = serviceName;
query.account = account;
query.passwordData = password;
return [query save:error];
}
+ (NSArray *)allAccounts {
return [self allAccounts:nil];
}
+ (NSArray *)allAccounts:(NSError *__autoreleasing *)error {
return [self accountsForService:nil error:error];
}
+ (NSArray *)accountsForService:(NSString *)serviceName {
return [self accountsForService:serviceName error:nil];
}
+ (NSArray *)accountsForService:(NSString *)serviceName error:(NSError *__autoreleasing *)error {
SSKeychainQuery *query = [[SSKeychainQuery alloc] init];
query.service = serviceName;
return [query fetchAll:error];
}
#if __IPHONE_4_0 && TARGET_OS_IPHONE
+ (CFTypeRef)accessibilityType {
return SSKeychainAccessibilityType;
}
+ (void)setAccessibilityType:(CFTypeRef)accessibilityType {
CFRetain(accessibilityType);
if (SSKeychainAccessibilityType) {
CFRelease(SSKeychainAccessibilityType);
}
SSKeychainAccessibilityType = accessibilityType;
}
#endif
@end
//
// SSKeychainQuery.h
// SSKeychain
//
// Created by Caleb Davenport on 3/19/13.
// Copyright (c) 2013-2014 Sam Soffes. All rights reserved.
//
#if __has_feature(modules)
@import Foundation;
@import Security;
#else
#import <Foundation/Foundation.h>
#import <Security/Security.h>
#endif
#if __IPHONE_7_0 || __MAC_10_9
// Keychain synchronization available at compile time
#define SSKEYCHAIN_SYNCHRONIZATION_AVAILABLE 1
#endif
#if __IPHONE_3_0 || __MAC_10_9
// Keychain access group available at compile time
#define SSKEYCHAIN_ACCESS_GROUP_AVAILABLE 1
#endif
#ifdef SSKEYCHAIN_SYNCHRONIZATION_AVAILABLE
typedef NS_ENUM(NSUInteger, SSKeychainQuerySynchronizationMode) {
SSKeychainQuerySynchronizationModeAny,
SSKeychainQuerySynchronizationModeNo,
SSKeychainQuerySynchronizationModeYes
};
#endif
/**
Simple interface for querying or modifying keychain items.
*/
@interface SSKeychainQuery : NSObject
/** kSecAttrAccount */
@property (nonatomic, copy) NSString *account;
/** kSecAttrService */
@property (nonatomic, copy) NSString *service;
/** kSecAttrLabel */
@property (nonatomic, copy) NSString *label;
#ifdef SSKEYCHAIN_ACCESS_GROUP_AVAILABLE
/** kSecAttrAccessGroup (only used on iOS) */
@property (nonatomic, copy) NSString *accessGroup;
#endif
#ifdef SSKEYCHAIN_SYNCHRONIZATION_AVAILABLE
/** kSecAttrSynchronizable */
@property (nonatomic) SSKeychainQuerySynchronizationMode synchronizationMode;
#endif
/** Root storage for password information */
@property (nonatomic, copy) NSData *passwordData;
/**
This property automatically transitions between an object and the value of
`passwordData` using NSKeyedArchiver and NSKeyedUnarchiver.
*/
@property (nonatomic, copy) id<NSCoding> passwordObject;
/**
Convenience accessor for setting and getting a password string. Passes through
to `passwordData` using UTF-8 string encoding.
*/
@property (nonatomic, copy) NSString *password;
///------------------------
/// @name Saving & Deleting
///------------------------
/**
Save the receiver's attributes as a keychain item. Existing items with the
given account, service, and access group will first be deleted.
@param error Populated should an error occur.
@return `YES` if saving was successful, `NO` otherwise.
*/
- (BOOL)save:(NSError **)error;
/**
Delete keychain items that match the given account, service, and access group.
@param error Populated should an error occur.
@return `YES` if saving was successful, `NO` otherwise.
*/
- (BOOL)deleteItem:(NSError **)error;
///---------------
/// @name Fetching
///---------------
/**
Fetch all keychain items that match the given account, service, and access
group. The values of `password` and `passwordData` are ignored when fetching.
@param error Populated should an error occur.
@return An array of dictionaries that represent all matching keychain items or
`nil` should an error occur.
The order of the items is not determined.
*/
- (NSArray<NSDictionary<NSString *, id> *> *)fetchAll:(NSError **)error;
/**
Fetch the keychain item that matches the given account, service, and access
group. The `password` and `passwordData` properties will be populated unless
an error occurs. The values of `password` and `passwordData` are ignored when
fetching.
@param error Populated should an error occur.
@return `YES` if fetching was successful, `NO` otherwise.
*/
- (BOOL)fetch:(NSError **)error;
///-----------------------------
/// @name Synchronization Status
///-----------------------------
#ifdef SSKEYCHAIN_SYNCHRONIZATION_AVAILABLE
/**
Returns a boolean indicating if keychain synchronization is available on the device at runtime. The #define
SSKEYCHAIN_SYNCHRONIZATION_AVAILABLE is only for compile time. If you are checking for the presence of synchronization,
you should use this method.
@return A value indicating if keychain synchronization is available
*/
+ (BOOL)isSynchronizationAvailable;
#endif
@end
//
// SSKeychainQuery.m
// SSKeychain
//
// Created by Caleb Davenport on 3/19/13.
// Copyright (c) 2013-2014 Sam Soffes. All rights reserved.
//
#import "SSKeychainQuery.h"
#import "SSKeychain.h"
@implementation SSKeychainQuery
@synthesize account = _account;
@synthesize service = _service;
@synthesize label = _label;
@synthesize passwordData = _passwordData;
#ifdef SSKEYCHAIN_ACCESS_GROUP_AVAILABLE
@synthesize accessGroup = _accessGroup;
#endif
#ifdef SSKEYCHAIN_SYNCHRONIZATION_AVAILABLE
@synthesize synchronizationMode = _synchronizationMode;
#endif
#pragma mark - Public
- (BOOL)save:(NSError *__autoreleasing *)error {
OSStatus status = SSKeychainErrorBadArguments;
if (!self.service || !self.account || !self.passwordData) {
if (error) {
*error = [[self class] errorWithCode:status];
}
return NO;
}
NSMutableDictionary *query = nil;
NSMutableDictionary * searchQuery = [self query];
status = SecItemCopyMatching((__bridge CFDictionaryRef)searchQuery, nil);
if (status == errSecSuccess) {//item already exists, update it!
query = [[NSMutableDictionary alloc]init];
[query setObject:self.passwordData forKey:(__bridge id)kSecValueData];
#if __IPHONE_4_0 && TARGET_OS_IPHONE
CFTypeRef accessibilityType = [SSKeychain accessibilityType];
if (accessibilityType) {
[query setObject:(__bridge id)accessibilityType forKey:(__bridge id)kSecAttrAccessible];
}
#endif
status = SecItemUpdate((__bridge CFDictionaryRef)(searchQuery), (__bridge CFDictionaryRef)(query));
}else if(status == errSecItemNotFound){//item not found, create it!
query = [self query];
if (self.label) {
[query setObject:self.label forKey:(__bridge id)kSecAttrLabel];
}
[query setObject:self.passwordData forKey:(__bridge id)kSecValueData];
#if __IPHONE_4_0 && TARGET_OS_IPHONE
CFTypeRef accessibilityType = [SSKeychain accessibilityType];
if (accessibilityType) {
[query setObject:(__bridge id)accessibilityType forKey:(__bridge id)kSecAttrAccessible];
}
#endif
status = SecItemAdd((__bridge CFDictionaryRef)query, NULL);
}
if (status != errSecSuccess && error != NULL) {
*error = [[self class] errorWithCode:status];
}
return (status == errSecSuccess);}
- (BOOL)deleteItem:(NSError *__autoreleasing *)error {
OSStatus status = SSKeychainErrorBadArguments;
if (!self.service || !self.account) {
if (error) {
*error = [[self class] errorWithCode:status];
}
return NO;
}
NSMutableDictionary *query = [self query];
#if TARGET_OS_IPHONE
status = SecItemDelete((__bridge CFDictionaryRef)query);
#else
// On Mac OS, SecItemDelete will not delete a key created in a different
// app, nor in a different version of the same app.
//
// To replicate the issue, save a password, change to the code and
// rebuild the app, and then attempt to delete that password.
//
// This was true in OS X 10.6 and probably later versions as well.
//
// Work around it by using SecItemCopyMatching and SecKeychainItemDelete.
CFTypeRef result = NULL;
[query setObject:@YES forKey:(__bridge id)kSecReturnRef];
status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &result);
if (status == errSecSuccess) {
status = SecKeychainItemDelete((SecKeychainItemRef)result);
CFRelease(result);
}
#endif
if (status != errSecSuccess && error != NULL) {
*error = [[self class] errorWithCode:status];
}
return (status == errSecSuccess);
}
- (NSArray *)fetchAll:(NSError *__autoreleasing *)error {
NSMutableDictionary *query = [self query];
[query setObject:@YES forKey:(__bridge id)kSecReturnAttributes];
[query setObject:(__bridge id)kSecMatchLimitAll forKey:(__bridge id)kSecMatchLimit];
#if __IPHONE_4_0 && TARGET_OS_IPHONE
CFTypeRef accessibilityType = [SSKeychain accessibilityType];
if (accessibilityType) {
[query setObject:(__bridge id)accessibilityType forKey:(__bridge id)kSecAttrAccessible];
}
#endif
CFTypeRef result = NULL;
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &result);
if (status != errSecSuccess && error != NULL) {
*error = [[self class] errorWithCode:status];
return nil;
}
return (__bridge_transfer NSArray *)result;
}
- (BOOL)fetch:(NSError *__autoreleasing *)error {
OSStatus status = SSKeychainErrorBadArguments;
if (!self.service || !self.account) {
if (error) {
*error = [[self class] errorWithCode:status];
}
return NO;
}
CFTypeRef result = NULL;
NSMutableDictionary *query = [self query];
[query setObject:@YES forKey:(__bridge id)kSecReturnData];
[query setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit];
status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &result);
if (status != errSecSuccess) {
if (error) {
*error = [[self class] errorWithCode:status];
}
return NO;
}
self.passwordData = (__bridge_transfer NSData *)result;
return YES;
}
#pragma mark - Accessors
- (void)setPasswordObject:(id<NSCoding>)object {
self.passwordData = [NSKeyedArchiver archivedDataWithRootObject:object];
}
- (id<NSCoding>)passwordObject {
if ([self.passwordData length]) {
return [NSKeyedUnarchiver unarchiveObjectWithData:self.passwordData];
}
return nil;
}
- (void)setPassword:(NSString *)password {
self.passwordData = [password dataUsingEncoding:NSUTF8StringEncoding];
}
- (NSString *)password {
if ([self.passwordData length]) {
return [[NSString alloc] initWithData:self.passwordData encoding:NSUTF8StringEncoding];
}
return nil;
}
#pragma mark - Synchronization Status
#ifdef SSKEYCHAIN_SYNCHRONIZATION_AVAILABLE
+ (BOOL)isSynchronizationAvailable {
#if TARGET_OS_IPHONE
// Apple suggested way to check for 7.0 at runtime
// https://developer.apple.com/library/ios/documentation/userexperience/conceptual/transitionguide/SupportingEarlieriOS.html
return floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1;
#else
return floor(NSFoundationVersionNumber) > NSFoundationVersionNumber10_8_4;
#endif
}
#endif
#pragma mark - Private
- (NSMutableDictionary *)query {
NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:3];
[dictionary setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];
if (self.service) {
[dictionary setObject:self.service forKey:(__bridge id)kSecAttrService];
}
if (self.account) {
[dictionary setObject:self.account forKey:(__bridge id)kSecAttrAccount];
}
#ifdef SSKEYCHAIN_ACCESS_GROUP_AVAILABLE
#if !TARGET_IPHONE_SIMULATOR
if (self.accessGroup) {
[dictionary setObject:self.accessGroup forKey:(__bridge id)kSecAttrAccessGroup];
}
#endif
#endif
#ifdef SSKEYCHAIN_SYNCHRONIZATION_AVAILABLE
if ([[self class] isSynchronizationAvailable]) {
id value;
switch (self.synchronizationMode) {
case SSKeychainQuerySynchronizationModeNo: {
value = @NO;
break;
}
case SSKeychainQuerySynchronizationModeYes: {
value = @YES;
break;
}
case SSKeychainQuerySynchronizationModeAny: {
value = (__bridge id)(kSecAttrSynchronizableAny);
break;
}
}
[dictionary setObject:value forKey:(__bridge id)(kSecAttrSynchronizable)];
}
#endif
return dictionary;
}
+ (NSError *)errorWithCode:(OSStatus) code {
static dispatch_once_t onceToken;
static NSBundle *resourcesBundle = nil;
dispatch_once(&onceToken, ^{
NSURL *url = [[NSBundle bundleForClass:[self class]] URLForResource:@"SSKeychain" withExtension:@"bundle"];
resourcesBundle = [NSBundle bundleWithURL:url];
});
NSString *message = nil;
switch (code) {
case errSecSuccess: return nil;
case SSKeychainErrorBadArguments: message = NSLocalizedStringFromTableInBundle(@"SSKeychainErrorBadArguments", @"SSKeychain", resourcesBundle, nil); break;
#if TARGET_OS_IPHONE
case errSecUnimplemented: {
message = NSLocalizedStringFromTableInBundle(@"errSecUnimplemented", @"SSKeychain", resourcesBundle, nil);
break;
}
case errSecParam: {
message = NSLocalizedStringFromTableInBundle(@"errSecParam", @"SSKeychain", resourcesBundle, nil);
break;
}
case errSecAllocate: {
message = NSLocalizedStringFromTableInBundle(@"errSecAllocate", @"SSKeychain", resourcesBundle, nil);
break;
}
case errSecNotAvailable: {
message = NSLocalizedStringFromTableInBundle(@"errSecNotAvailable", @"SSKeychain", resourcesBundle, nil);
break;
}
case errSecDuplicateItem: {
message = NSLocalizedStringFromTableInBundle(@"errSecDuplicateItem", @"SSKeychain", resourcesBundle, nil);
break;
}
case errSecItemNotFound: {
message = NSLocalizedStringFromTableInBundle(@"errSecItemNotFound", @"SSKeychain", resourcesBundle, nil);
break;
}
case errSecInteractionNotAllowed: {
message = NSLocalizedStringFromTableInBundle(@"errSecInteractionNotAllowed", @"SSKeychain", resourcesBundle, nil);
break;
}
case errSecDecode: {
message = NSLocalizedStringFromTableInBundle(@"errSecDecode", @"SSKeychain", resourcesBundle, nil);
break;
}
case errSecAuthFailed: {
message = NSLocalizedStringFromTableInBundle(@"errSecAuthFailed", @"SSKeychain", resourcesBundle, nil);
break;
}
default: {
message = NSLocalizedStringFromTableInBundle(@"errSecDefault", @"SSKeychain", resourcesBundle, nil);
}
#else
default:
message = (__bridge_transfer NSString *)SecCopyErrorMessageString(code, NULL);
#endif
}
NSDictionary *userInfo = nil;
if (message) {
userInfo = @{ NSLocalizedDescriptionKey : message };
}
return [NSError errorWithDomain:kSSKeychainErrorDomain code:code userInfo:userInfo];
}
@end
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/AFNetworking" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/AFNetworking" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SSKeychain"
OTHER_LDFLAGS = -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" OTHER_LDFLAGS = -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration"
PODS_ROOT = ${SRCROOT} PODS_ROOT = ${SRCROOT}
SKIP_INSTALL = YES SKIP_INSTALL = YES
\ No newline at end of file
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SSKeychain"
OTHER_LDFLAGS = -framework "UIKit" OTHER_LDFLAGS = -framework "UIKit"
PODS_ROOT = ${SRCROOT} PODS_ROOT = ${SRCROOT}
SKIP_INSTALL = YES SKIP_INSTALL = YES
\ No newline at end of file
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/IQKeyboardManager" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/IQKeyboardManager" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SSKeychain"
PODS_ROOT = ${SRCROOT} PODS_ROOT = ${SRCROOT}
SKIP_INSTALL = YES SKIP_INSTALL = YES
\ No newline at end of file
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/JSONModel" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/JSONModel" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SSKeychain"
PODS_ROOT = ${SRCROOT} PODS_ROOT = ${SRCROOT}
SKIP_INSTALL = YES SKIP_INSTALL = YES
\ No newline at end of file
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MBProgressHUD" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MBProgressHUD" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SSKeychain"
OTHER_LDFLAGS = -framework "CoreGraphics" -framework "QuartzCore" OTHER_LDFLAGS = -framework "CoreGraphics" -framework "QuartzCore"
PODS_ROOT = ${SRCROOT} PODS_ROOT = ${SRCROOT}
SKIP_INSTALL = YES SKIP_INSTALL = YES
\ No newline at end of file
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MJRefresh" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MJRefresh" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SSKeychain"
PODS_ROOT = ${SRCROOT} PODS_ROOT = ${SRCROOT}
SKIP_INSTALL = YES SKIP_INSTALL = YES
\ No newline at end of file
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Masonry" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Masonry" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SSKeychain"
OTHER_LDFLAGS = -framework "Foundation" -framework "UIKit" OTHER_LDFLAGS = -framework "Foundation" -framework "UIKit"
PODS_ROOT = ${SRCROOT} PODS_ROOT = ${SRCROOT}
SKIP_INSTALL = YES SKIP_INSTALL = YES
\ No newline at end of file
...@@ -208,4 +208,28 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ...@@ -208,4 +208,28 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
## SSKeychain
Copyright (c) 2010-2016 Sam Soffes, http://soff.es
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.
Generated by CocoaPods - http://cocoapods.org Generated by CocoaPods - http://cocoapods.org
...@@ -256,6 +256,34 @@ THE SOFTWARE. ...@@ -256,6 +256,34 @@ THE SOFTWARE.
<key>Type</key> <key>Type</key>
<string>PSGroupSpecifier</string> <string>PSGroupSpecifier</string>
</dict> </dict>
<dict>
<key>FooterText</key>
<string>Copyright (c) 2010-2016 Sam Soffes, http://soff.es
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.
</string>
<key>Title</key>
<string>SSKeychain</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict> <dict>
<key>FooterText</key> <key>FooterText</key>
<string>Generated by CocoaPods - http://cocoapods.org</string> <string>Generated by CocoaPods - http://cocoapods.org</string>
......
...@@ -61,11 +61,13 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then ...@@ -61,11 +61,13 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
install_resource "BaiduMapKit/BaiduMapKit/BaiduMapAPI_Map.framework/Resources/mapapi.bundle" install_resource "BaiduMapKit/BaiduMapKit/BaiduMapAPI_Map.framework/Resources/mapapi.bundle"
install_resource "IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle" install_resource "IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle"
install_resource "MJRefresh/MJRefresh/MJRefresh.bundle" install_resource "MJRefresh/MJRefresh/MJRefresh.bundle"
install_resource "SSKeychain/Support/SSKeychain.bundle"
fi fi
if [[ "$CONFIGURATION" == "Release" ]]; then if [[ "$CONFIGURATION" == "Release" ]]; then
install_resource "BaiduMapKit/BaiduMapKit/BaiduMapAPI_Map.framework/Resources/mapapi.bundle" install_resource "BaiduMapKit/BaiduMapKit/BaiduMapAPI_Map.framework/Resources/mapapi.bundle"
install_resource "IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle" install_resource "IQKeyboardManager/IQKeyBoardManager/Resources/IQKeyboardManager.bundle"
install_resource "MJRefresh/MJRefresh/MJRefresh.bundle" install_resource "MJRefresh/MJRefresh/MJRefresh.bundle"
install_resource "SSKeychain/Support/SSKeychain.bundle"
fi fi
mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
......
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SSKeychain"
OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/BaiduMapKit" -isystem "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" -isystem "${PODS_ROOT}/Headers/Public/IQKeyboardManager" -isystem "${PODS_ROOT}/Headers/Public/JSONModel" -isystem "${PODS_ROOT}/Headers/Public/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Masonry" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/BaiduMapKit" -isystem "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" -isystem "${PODS_ROOT}/Headers/Public/IQKeyboardManager" -isystem "${PODS_ROOT}/Headers/Public/JSONModel" -isystem "${PODS_ROOT}/Headers/Public/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Masonry" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -isystem "${PODS_ROOT}/Headers/Public/SSKeychain"
OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"DZNEmptyDataSet" -l"IQKeyboardManager" -l"JSONModel" -l"MBProgressHUD" -l"MJRefresh" -l"Masonry" -l"SDWebImage" -l"sqlite3.0" -l"stdc++.6.0.9" -framework "BaiduMapAPI_Base" -framework "BaiduMapAPI_Cloud" -framework "BaiduMapAPI_Location" -framework "BaiduMapAPI_Map" -framework "BaiduMapAPI_Radar" -framework "BaiduMapAPI_Search" -framework "BaiduMapAPI_Utils" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"DZNEmptyDataSet" -l"IQKeyboardManager" -l"JSONModel" -l"MBProgressHUD" -l"MJRefresh" -l"Masonry" -l"SDWebImage" -l"SSKeychain" -l"sqlite3.0" -l"stdc++.6.0.9" -framework "BaiduMapAPI_Base" -framework "BaiduMapAPI_Cloud" -framework "BaiduMapAPI_Location" -framework "BaiduMapAPI_Map" -framework "BaiduMapAPI_Radar" -framework "BaiduMapAPI_Search" -framework "BaiduMapAPI_Utils" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit"
PODS_ROOT = ${SRCROOT}/Pods PODS_ROOT = ${SRCROOT}/Pods
\ No newline at end of file
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit" "${PODS_ROOT}/BaiduMapKit/BaiduMapKit"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SSKeychain"
OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/BaiduMapKit" -isystem "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" -isystem "${PODS_ROOT}/Headers/Public/IQKeyboardManager" -isystem "${PODS_ROOT}/Headers/Public/JSONModel" -isystem "${PODS_ROOT}/Headers/Public/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Masonry" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/BaiduMapKit" -isystem "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" -isystem "${PODS_ROOT}/Headers/Public/IQKeyboardManager" -isystem "${PODS_ROOT}/Headers/Public/JSONModel" -isystem "${PODS_ROOT}/Headers/Public/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Masonry" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -isystem "${PODS_ROOT}/Headers/Public/SSKeychain"
OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"DZNEmptyDataSet" -l"IQKeyboardManager" -l"JSONModel" -l"MBProgressHUD" -l"MJRefresh" -l"Masonry" -l"SDWebImage" -l"sqlite3.0" -l"stdc++.6.0.9" -framework "BaiduMapAPI_Base" -framework "BaiduMapAPI_Cloud" -framework "BaiduMapAPI_Location" -framework "BaiduMapAPI_Map" -framework "BaiduMapAPI_Radar" -framework "BaiduMapAPI_Search" -framework "BaiduMapAPI_Utils" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"DZNEmptyDataSet" -l"IQKeyboardManager" -l"JSONModel" -l"MBProgressHUD" -l"MJRefresh" -l"Masonry" -l"SDWebImage" -l"SSKeychain" -l"sqlite3.0" -l"stdc++.6.0.9" -framework "BaiduMapAPI_Base" -framework "BaiduMapAPI_Cloud" -framework "BaiduMapAPI_Location" -framework "BaiduMapAPI_Map" -framework "BaiduMapAPI_Radar" -framework "BaiduMapAPI_Search" -framework "BaiduMapAPI_Utils" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit"
PODS_ROOT = ${SRCROOT}/Pods PODS_ROOT = ${SRCROOT}/Pods
\ No newline at end of file
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SSKeychain"
OTHER_LDFLAGS = -framework "ImageIO" OTHER_LDFLAGS = -framework "ImageIO"
PODS_ROOT = ${SRCROOT} PODS_ROOT = ${SRCROOT}
SKIP_INSTALL = YES SKIP_INSTALL = YES
\ No newline at end of file
#import <Foundation/Foundation.h>
@interface PodsDummy_SSKeychain : NSObject
@end
@implementation PodsDummy_SSKeychain
@end
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#endif
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SSKeychain" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/BaiduMapKit" "${PODS_ROOT}/Headers/Public/DZNEmptyDataSet" "${PODS_ROOT}/Headers/Public/IQKeyboardManager" "${PODS_ROOT}/Headers/Public/JSONModel" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SSKeychain"
OTHER_LDFLAGS = -framework "Foundation" -framework "Security"
PODS_ROOT = ${SRCROOT}
SKIP_INSTALL = YES
\ No newline at end of file
platform:ios,'7.0' platform:ios,'7.0'
pod 'SSKeychain', '~> 1.4.1'
pod 'BaiduMapKit', '~> 3.0.0' pod 'BaiduMapKit', '~> 3.0.0'
pod 'MBProgressHUD', '~> 1.0.0' pod 'MBProgressHUD', '~> 1.0.0'
pod 'AFNetworking', '~> 3.1.0' pod 'AFNetworking', '~> 3.1.0'
......
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