Commit 2ca2d39f by 李威

pod修改

parent 156dfa0d
<?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>DJMHomeDR.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
<key>DJMHomeTY.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>1</integer>
</dict>
<key>DJMPS2.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>2</integer>
</dict>
<key>HJMDrWarter.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>3</integer>
</dict>
</dict>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
uuid = "A5958A80-317D-49F0-AE28-91C51D24B77C"
type = "0"
version = "2.0">
</Bucket>
...@@ -214,4 +214,8 @@ ...@@ -214,4 +214,8 @@
#define DR05_HE_send_start @"0600a632020901"//发送开启 #define DR05_HE_send_start @"0600a632020901"//发送开启
#define DR05_HE_send_wendu @"0600a632020b"//发送温度 #define DR05_HE_send_wendu @"0600a632020b"//发送温度
#define DR05_HE_send_nengliang @"0600a632020a"//发送能量 #define DR05_HE_send_nengliang @"0600a632020a"//发送能量
#define DR05_HE_get_Version @"0500A6330240"//获取版本
#define DR05_HE_send_getUpdateVersion @"0500a63102aa"//发送固件升级
#define DR05_HE_back_Version @"0700A6330140"//返回版本
#endif /* XHCommand_h */ #endif /* XHCommand_h */
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
#ifndef XHURL_h #ifndef XHURL_h
#define XHURL_h #define XHURL_h
//#define URL @"https://testdjm.imoreme.com"//测试 #define URL @"https://testdjm.imoreme.com"//测试
#define URL @"https://djm.imoreme.com"//正式 //#define URL @"https://djm.imoreme.com"//正式
//#define URL @"http://192.168.1.168:8080"//luocong //#define URL @"http://192.168.1.168:8080"//luocong
/** 发送验证码 **/ /** 发送验证码 **/
#define VerifyCodeURL [NSString stringWithFormat:@"%@%@",URL,@"/ldm/api/getVerifyCode"] #define VerifyCodeURL [NSString stringWithFormat:@"%@%@",URL,@"/ldm/api/getVerifyCode"]
......
...@@ -77,6 +77,8 @@ typedef void (^BluetoothStatusBlock)(BluetoothStatus status); ...@@ -77,6 +77,8 @@ typedef void (^BluetoothStatusBlock)(BluetoothStatus status);
- (void)writeValue:(Byte)byteValue; - (void)writeValue:(Byte)byteValue;
- (void)writeStr:(NSString *)str; - (void)writeStr:(NSString *)str;
- (void)writeData:(NSData *)data; - (void)writeData:(NSData *)data;
//- (void)writeElectric_MicroneedleStr:(NSString *)str; //- (void)writeElectric_MicroneedleStr:(NSString *)str;
@end @end
...@@ -786,6 +786,12 @@ static HJBluetoothManager *sharedinstance = nil; ...@@ -786,6 +786,12 @@ static HJBluetoothManager *sharedinstance = nil;
} }
}); });
} }
if ([XHGetDataManager.deviceCode isEqualToString:Dr05DeviceName]) {
if ([[NSString dataConvertIntoString:data] isEqualToString:@"43"] || [[NSString dataConvertIntoString:data] isEqualToString:@"06"] ||[[NSString dataConvertIntoString:data] isEqualToString:@"15"] ||[[NSString dataConvertIntoString:data] isEqualToString:@"0643"]||[[NSString dataConvertIntoString:data] isEqualToString:@"555047520D0A"]) {
[self processTheReceivedData:[[[HJTools shared] dataConvertIntoString:data] uppercaseString]];
}
}
} }
- (void)checkDeviceVersionWithResult:(void (^)(BOOL isUpdate))isUpdate binUrl:(void (^)(NSString *url))binUrl{ - (void)checkDeviceVersionWithResult:(void (^)(BOOL isUpdate))isUpdate binUrl:(void (^)(NSString *url))binUrl{
...@@ -958,7 +964,13 @@ static HJBluetoothManager *sharedinstance = nil; ...@@ -958,7 +964,13 @@ static HJBluetoothManager *sharedinstance = nil;
if ([str isEqualToString:@"43"] || [str isEqualToString:@"06"] ||[str isEqualToString:@"15"] ||[str isEqualToString:@"0643"]||[str isEqualToString:@"555047520D0A"]) {
for (id<BluetoothDelegate>delegate in self.delegates) {
if ([delegate respondsToSelector:@selector(didUpdateValueForCharacteristicValue:)]) {
[delegate didUpdateValueForCharacteristicValue:str];
}
}
}
...@@ -1010,7 +1022,7 @@ static HJBluetoothManager *sharedinstance = nil; ...@@ -1010,7 +1022,7 @@ static HJBluetoothManager *sharedinstance = nil;
NSData *data = [[HJTools shared] stringConvertIntoData:str]; NSData *data = [[HJTools shared] stringConvertIntoData:str];
NSLog(@"\n接收数据:写入数据:%@",data); // NSLog(@"\n接收数据:写入数据:%@",data);
NSLog(@"\n写入数据 %@",[[HJTools shared] stringConvertIntoData:str]); NSLog(@"\n写入数据 %@",[[HJTools shared] stringConvertIntoData:str]);
// HJLog(@"写入数据:%@",data); // HJLog(@"写入数据:%@",data);
if (_writeCharacteristic) { if (_writeCharacteristic) {
...@@ -1020,6 +1032,10 @@ static HJBluetoothManager *sharedinstance = nil; ...@@ -1020,6 +1032,10 @@ static HJBluetoothManager *sharedinstance = nil;
} }
- (BOOL)resultOfCheckSum:(Byte*)receiveBytes length:(NSUInteger)length - (BOOL)resultOfCheckSum:(Byte*)receiveBytes length:(NSUInteger)length
{ {
unsigned long checkSum = 0; unsigned long checkSum = 0;
......
...@@ -31,6 +31,8 @@ ...@@ -31,6 +31,8 @@
manager.requestSerializer.timeoutInterval = 50; manager.requestSerializer.timeoutInterval = 50;
[manager.requestSerializer setValue:[NSString stringWithFormat:@"%d",XHGetDataManager.simparlanguage] forHTTPHeaderField:@"Accept-Language"]; [manager.requestSerializer setValue:[NSString stringWithFormat:@"%d",XHGetDataManager.simparlanguage] forHTTPHeaderField:@"Accept-Language"];
[manager.requestSerializer setValue:XHGetDataManager.token forHTTPHeaderField:@"token"];
NSLog(@"%d",XHGetDataManager.simparlanguage ); NSLog(@"%d",XHGetDataManager.simparlanguage );
[manager GET:url parameters:updateDic headers:nil progress:^(NSProgress * _Nonnull downloadProgress) { [manager GET:url parameters:updateDic headers:nil progress:^(NSProgress * _Nonnull downloadProgress) {
......
// //
// YModem.c // YModem.c
// BWProject // YModemCs
// //
// Created by rnd on 2018/7/4. // Created by rnd on 2018/6/14.
// Copyright © 2018年 Radiance Instruments Ltd. All rights reserved. // Copyright © 2018年 GoDream. All rights reserved.
// //
#include "YModem.h" #include "YModem.h"
...@@ -69,7 +69,7 @@ void PrepareIntialPacket(uint8_t *p_data, const uint8_t *p_file_name, uint32_t l ...@@ -69,7 +69,7 @@ void PrepareIntialPacket(uint8_t *p_data, const uint8_t *p_file_name, uint32_t l
} }
void PreparePacket(uint8_t *p_source, uint8_t *p_packet, uint8_t pkt_nr, uint32_t pack_size, uint32_t size_blk) void PreparePacket(uint8_t *p_source, uint8_t *p_packet, uint32_t pack_size, uint8_t pkt_nr, uint32_t size_blk)
{ {
uint8_t *p_record; uint8_t *p_record;
uint32_t i, size, packet_size; uint32_t i, size, packet_size;
...@@ -164,7 +164,6 @@ void PrepareEndPacket(uint8_t *p_packet) { ...@@ -164,7 +164,6 @@ void PrepareEndPacket(uint8_t *p_packet) {
p_packet[i] = resultH; p_packet[i] = resultH;
p_packet[i+1] = resultL; p_packet[i+1] = resultL;
} }
/** /**
......
// //
// YModem.h // YModem.h
// BWProject // YModemCs
// //
// Created by rnd on 2018/7/4. // Created by rnd on 2018/6/14.
// Copyright © 2018年 Radiance Instruments Ltd. All rights reserved. // Copyright © 2018年 GoDream. All rights reserved.
// //
/** /**
* 传输数据规格 * 传输数据规格
* ======================================================================================== * ========================================================================================
...@@ -50,7 +51,8 @@ ...@@ -50,7 +51,8 @@
#define PACKET_TRAILER_SIZE ((uint32_t)2) #define PACKET_TRAILER_SIZE ((uint32_t)2)
#define PACKET_OVERHEAD_SIZE (PACKET_HEADER_SIZE + PACKET_TRAILER_SIZE - 1) #define PACKET_OVERHEAD_SIZE (PACKET_HEADER_SIZE + PACKET_TRAILER_SIZE - 1)
#define PACKET_SIZE ((uint32_t)128) #define PACKET_SIZE ((uint32_t)128)
#define PACKET_1K_SIZE ((uint32_t)256) //默认为 1024大小
#define PACKET_1K_SIZE ((uint32_t)1024)
/* /-------- Packet in IAP memory ------------------------------------------\ /* /-------- Packet in IAP memory ------------------------------------------\
* | 0 | 1 | 2 | 3 | 4 | ... | n+4 | n+5 | n+6 | * | 0 | 1 | 2 | 3 | 4 | ... | n+4 | n+5 | n+6 |
...@@ -86,22 +88,19 @@ ...@@ -86,22 +88,19 @@
#define OTAACK @"06" #define OTAACK @"06"
#define OTANAK @"15" #define OTANAK @"15"
#define OTACA @"18" #define OTACA @"18"
#define OTAC @"43"//开始 #define OTAC @"43"
#define OTASTART @"0643"//第一包和最后一包 #define OTASTART @"0643"
#define OTAUPGR @"555047520D0A"
#define OTAUPEND 10000 #define OTAUPEND 10000
#endif /* YModem_h */ #endif /* YModem_h */
void PrepareIntialPacket(uint8_t *p_data, const uint8_t *p_file_name, uint32_t length); void PrepareIntialPacket(uint8_t *p_data, const uint8_t *p_file_name, uint32_t length);
void PreparePacket(uint8_t *p_source, uint8_t *p_packet, uint8_t pkt_nr, uint32_t pack_size, uint32_t size_blk); void PreparePacket(uint8_t *p_source, uint8_t *p_packet, uint32_t pack_size, uint8_t pkt_nr, uint32_t size_blk);
void PrepareEndPacket(uint8_t *p_packet); void PrepareEndPacket(uint8_t *p_packet);
uint16_t Cccal_CRC16(const uint8_t* p_data, uint32_t size); uint16_t Cccal_CRC16(const uint8_t* p_data, uint32_t size);
// //
// YModemUtil.h // YModemUtil.h
// BWProject // YModemCs
// //
// Created by rnd on 2018/7/4. // Created by rnd on 2018/6/14.
// Copyright © 2018年 Radiance Instruments Ltd. All rights reserved. // Copyright © 2018年 GoDream. All rights reserved.
// //
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import "YModem.h" #import "YModem.h"
typedef enum : NSUInteger { typedef enum : NSUInteger {
OTAStatusNONE, OTAStatusNONE,
OTAStatusWaiting, OTAStatusWaiting,
...@@ -30,11 +29,9 @@ typedef enum : NSUInteger { ...@@ -30,11 +29,9 @@ typedef enum : NSUInteger {
OrderStatusFirst, OrderStatusFirst,
} OrderStatus; } OrderStatus;
//设置代理方法
@protocol YModemUtilDelegate <NSObject> @protocol YModemUtilDelegate <NSObject>
//写入蓝牙数据 //writing Bluetooth data
-(void)onWriteBleData:(NSData*) data; -(void)onWriteBleData:(NSData*) data;
@end @end
...@@ -70,7 +67,4 @@ typedef enum : NSUInteger { ...@@ -70,7 +67,4 @@ typedef enum : NSUInteger {
- (instancetype)init:(uint32_t)size; - (instancetype)init:(uint32_t)size;
@end @end
...@@ -6,11 +6,15 @@ ...@@ -6,11 +6,15 @@
// //
#import "XHParentVC.h" #import "XHParentVC.h"
#import "DXHFXVideoModel.h"
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@interface DXHEUpkeepVC : XHParentVC @interface DXHEUpkeepVC : XHParentVC
@property (nonatomic,strong)NSString *videoUrl;
@property (nonatomic,strong)DXHFXVideoDetailsModel *videoListModel;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END
...@@ -9,14 +9,12 @@ ...@@ -9,14 +9,12 @@
#import "ZFPlayer.h" #import "ZFPlayer.h"
#import <ZFPlayer/ZFPlayerControlView.h> #import <ZFPlayer/ZFPlayerControlView.h>
#import <ZFPlayer/ZFAVPlayerManager.h> #import <ZFPlayer/ZFAVPlayerManager.h>
#import "DXHFXVideoModel.h"
#import <KTVHTTPCache/KTVHTTPCache.h> #import <KTVHTTPCache/KTVHTTPCache.h>
@interface DXHEUpkeepVC () @interface DXHEUpkeepVC ()
@property (nonatomic, strong) ZFPlayerControlView *controlView; @property (nonatomic, strong) ZFPlayerControlView *controlView;
@property (nonatomic,strong) ZFPlayerController *playerView; @property (nonatomic,strong) ZFPlayerController *playerView;
@property (nonatomic,strong) UIView *containerView; @property (nonatomic,strong) UIView *containerView;
@property (nonatomic,strong)DXHFXVideoDetailsModel *videoListModel;
@end @end
...@@ -28,6 +26,14 @@ ...@@ -28,6 +26,14 @@
[self initData]; [self initData];
[self initUI]; [self initUI];
[self requestVideoList]; [self requestVideoList];
NSURL *proxyURL = [KTVHTTPCache proxyURLWithOriginalURL:[NSURL URLWithString:self.videoListModel.videoUrl]];
self.playerView.assetURL = proxyURL;
HJSelfWeak;
self.playerView.playerDidToEnd = ^(id _Nonnull asset) {
weakSelf.playerView.assetURL = proxyURL;
};
// Do any additional setup after loading the view. // Do any additional setup after loading the view.
} }
...@@ -39,7 +45,7 @@ ...@@ -39,7 +45,7 @@
self.title = @"Dr-05"; self.title = @"Dr-05";
self.view.backgroundColor = XHColorRGB(247, 247, 247); self.view.backgroundColor = XHColorRGB(247, 247, 247);
// self.navigationController.navigationBar.backgroundColor = [UIColor whiteColor]; // self.navigationController.navigationBar.backgroundColor = [UIColor whiteColor];
UILabel *titleLb = [UILabel new]; UILabel *titleLb = [UILabel new];
titleLb.text = HJLocalizedString(@"探头清洁指引"); titleLb.text = HJLocalizedString(@"探头清洁指引");
titleLb.font = XHFontSize(17); titleLb.font = XHFontSize(17);
...@@ -75,7 +81,7 @@ ...@@ -75,7 +81,7 @@
[self.view addSubview:_containerView]; [self.view addSubview:_containerView];
[_containerView mas_makeConstraints:^(MASConstraintMaker *make) { [_containerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.equalTo(@(HJScreenWidth - 38)); make.width.equalTo(@(HJScreenWidth - 38));
make.centerX.equalTo(self); make.centerX.equalTo(self.view);
make.height.equalTo(@((HJScreenWidth - 38) * 0.5625)); make.height.equalTo(@((HJScreenWidth - 38) * 0.5625));
// make.height.equalTo(@0); // make.height.equalTo(@0);
make.top.equalTo(titleLb.mas_bottom).offset(42*IPhone6ScaleHeight); make.top.equalTo(titleLb.mas_bottom).offset(42*IPhone6ScaleHeight);
...@@ -103,7 +109,7 @@ ...@@ -103,7 +109,7 @@
self.playerView.currentPlayerManager.scalingMode = ZFPlayerScalingModeAspectFill; self.playerView.currentPlayerManager.scalingMode = ZFPlayerScalingModeAspectFill;
self.playerView.pauseWhenAppResignActive = YES; self.playerView.pauseWhenAppResignActive = YES;
self.playerView.pauseByEvent = YES; self.playerView.pauseByEvent = YES;
[self.playerView.currentPlayerManager play];
UILabel *detailLabel = [[UILabel alloc] init]; UILabel *detailLabel = [[UILabel alloc] init];
detailLabel.text = HJLocalizedString(@"使用纸巾擦拭探头,将探头残余凝胶清洁干净 后,再次使用酒精棉片或生理盐水重新擦拭探 头,保持探头干净卫生,更助于仪器的长期使 "); detailLabel.text = HJLocalizedString(@"使用纸巾擦拭探头,将探头残余凝胶清洁干净 后,再次使用酒精棉片或生理盐水重新擦拭探 头,保持探头干净卫生,更助于仪器的长期使 ");
...@@ -114,7 +120,7 @@ ...@@ -114,7 +120,7 @@
[detailLabel mas_makeConstraints:^(MASConstraintMaker *make) { [detailLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.equalTo(@(HJScreenWidth - 38)); make.width.equalTo(@(HJScreenWidth - 38));
make.centerX.equalTo(self); make.centerX.equalTo(self.view);
// make.height.equalTo(@0); // make.height.equalTo(@0);
make.top.equalTo(_containerView.mas_bottom).offset(42*IPhone6ScaleHeight); make.top.equalTo(_containerView.mas_bottom).offset(42*IPhone6ScaleHeight);
...@@ -147,16 +153,15 @@ ...@@ -147,16 +153,15 @@
}]; }];
} }
-(void)setVideoListModel:(DXHFXVideoDetailsModel *)videoListModel { - (void)setIsBack:(BOOL)isBack{
_videoListModel = videoListModel; [self.navigationController popViewControllerAnimated:YES];
NSURL *proxyURL = [KTVHTTPCache proxyURLWithOriginalURL:[NSURL URLWithString:videoListModel.videoUrl]];
self.playerView.assetURL = proxyURL;
HJSelfWeak;
self.playerView.playerDidToEnd = ^(id _Nonnull asset) {
weakSelf.playerView.assetURL = proxyURL;
};
} }
//-(void)setVideoListModel:(DXHFXVideoDetailsModel *)videoListModel {
// _videoListModel = videoListModel;
//
//}
- (NSMutableArray *)setTimeLineWithString:(NSString *)describeInfo{ - (NSMutableArray *)setTimeLineWithString:(NSString *)describeInfo{
......
...@@ -37,6 +37,8 @@ typedef enum : NSUInteger{ ...@@ -37,6 +37,8 @@ typedef enum : NSUInteger{
@property (nonatomic,strong) ZFPlayerController *playerView; @property (nonatomic,strong) ZFPlayerController *playerView;
@property (nonatomic,strong) ZFAVPlayerManager *playerManager;
@property (nonatomic,strong) DXHFXVideoDetailsModel *videoModel; @property (nonatomic,strong) DXHFXVideoDetailsModel *videoModel;
@property (nonatomic,strong) NSMutableArray <DXRDSmartRec *>*smartRecModelArray; @property (nonatomic,strong) NSMutableArray <DXRDSmartRec *>*smartRecModelArray;
@property (nonatomic,strong) id<DXHotElecticViewDelegate>delegate; @property (nonatomic,strong) id<DXHotElecticViewDelegate>delegate;
...@@ -47,6 +49,14 @@ typedef enum : NSUInteger{ ...@@ -47,6 +49,14 @@ typedef enum : NSUInteger{
//模式切换 0.智能推荐 1.自定义 //模式切换 0.智能推荐 1.自定义
-(void)switchingModeType:(NSInteger)type; -(void)switchingModeType:(NSInteger)type;
-(void)controlWenDu:(NSInteger)wenduNum AndNengLiangNum:(NSInteger)nengliangNum;
-(void)playHotElecticVideo:(DXHFXVideoDetailsModel *)model;
-(void)setPlayerControllerPlay;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END
...@@ -54,8 +54,8 @@ ...@@ -54,8 +54,8 @@
self = [super initWithFrame:frame]; self = [super initWithFrame:frame];
if(self) { if(self) {
self.backgroundColor = XHColorRGB_Alpha(247, 247, 247, 1); self.backgroundColor = XHColorRGB_Alpha(247, 247, 247, 1);
_wenduNum = 0; // _wenduNum = 0;
_nengliangNum = 0; // _nengliangNum = 0;
[self initUI]; [self initUI];
} }
return self; return self;
...@@ -123,20 +123,20 @@ ...@@ -123,20 +123,20 @@
}]; }];
ZFAVPlayerManager *playerManager = [[ZFAVPlayerManager alloc] init]; _playerManager = [[ZFAVPlayerManager alloc] init];
playerManager.shouldAutoPlay = YES; _playerManager.shouldAutoPlay = YES;
if([HJUserDefaults objectForKey:@"videoSwitchIsOn"]){ if([HJUserDefaults objectForKey:@"videoSwitchIsOn"]){
NSString *videoSwitchIsOn = [HJUserDefaults objectForKey:@"videoSwitchIsOn"]; NSString *videoSwitchIsOn = [HJUserDefaults objectForKey:@"videoSwitchIsOn"];
if([videoSwitchIsOn isEqualToString:@"1"]){ if([videoSwitchIsOn isEqualToString:@"1"]){
playerManager.shouldAutoPlay = YES; _playerManager.shouldAutoPlay = YES;
}else{ }else{
playerManager.shouldAutoPlay = NO; _playerManager.shouldAutoPlay = NO;
} }
}else{ }else{
playerManager.shouldAutoPlay = YES; _playerManager.shouldAutoPlay = YES;
} }
_playerView = [[ZFPlayerController alloc]initWithPlayerManager:playerManager containerView:_containerView]; _playerView = [[ZFPlayerController alloc]initWithPlayerManager:_playerManager containerView:_containerView];
/// 调节播放进度 /// 调节播放进度
// - (void)seekToTime:(NSTimeInterval)time completionHandler:(void (^ __nullable)(BOOL finished))completionHandler; // - (void)seekToTime:(NSTimeInterval)time completionHandler:(void (^ __nullable)(BOOL finished))completionHandler;
self.playerView.controlView = self.controlView; self.playerView.controlView = self.controlView;
...@@ -162,6 +162,16 @@ ...@@ -162,6 +162,16 @@
[_volumeBtn setImage:[UIImage imageNamed:@"HFX_volume"] forState:UIControlStateSelected]; [_volumeBtn setImage:[UIImage imageNamed:@"HFX_volume"] forState:UIControlStateSelected];
_volumeBtn.backgroundColor = XHColorRGB_Alpha(0, 0, 0, 0.45); _volumeBtn.backgroundColor = XHColorRGB_Alpha(0, 0, 0, 0.45);
[_volumeBtn addTarget:self action:@selector(changeVolume:) forControlEvents:UIControlEventTouchUpInside]; [_volumeBtn addTarget:self action:@selector(changeVolume:) forControlEvents:UIControlEventTouchUpInside];
if([HJUserDefaults objectForKey:@"videoVolumeIsOn"]){
NSString *videoVolumeIsOn = [HJUserDefaults objectForKey:@"videoVolumeIsOn"];
if ([videoVolumeIsOn isEqualToString:@"2"]) {
_volumeBtn.selected = NO;
}else {
_volumeBtn.selected = YES;
}
}else {
_volumeBtn.selected = YES;
}
_volumeBtn.layer.cornerRadius = 16.f; _volumeBtn.layer.cornerRadius = 16.f;
_volumeBtn.layer.masksToBounds = YES; _volumeBtn.layer.masksToBounds = YES;
[_controlView addSubview:_volumeBtn]; [_controlView addSubview:_volumeBtn];
...@@ -485,7 +495,11 @@ ...@@ -485,7 +495,11 @@
if (array.count == 2) { if (array.count == 2) {
_wdSlider.minimumValue = [array[0] floatValue]; _wdSlider.minimumValue = [array[0] floatValue];
_wdSlider.maximumValue = [array[1] floatValue]; _wdSlider.maximumValue = [array[1] floatValue];
_wenduNum = _wdSlider.minimumValue*100; // _wenduNum = _wdSlider.minimumValue*100;
_wdSlider.value = _wenduNum/100.f;
_wdNumLabel.text = [NSString stringWithFormat:@"%.f%%",self.wdSlider.value/_wdSlider.maximumValue*100];
} }
} }
else if ([model.keystr isEqualToString:@"dr_05_smart_energy"]){ else if ([model.keystr isEqualToString:@"dr_05_smart_energy"]){
...@@ -493,7 +507,9 @@ ...@@ -493,7 +507,9 @@
if (array.count == 2) { if (array.count == 2) {
_nlSlider.minimumValue = [array[0] floatValue]; _nlSlider.minimumValue = [array[0] floatValue];
_nlSlider.maximumValue = [array[1] floatValue]; _nlSlider.maximumValue = [array[1] floatValue];
_nengliangNum = _wdSlider.minimumValue*100; // _nengliangNum = _wdSlider.minimumValue*100;
_nlSlider.value = _nengliangNum/100.f;
_nlNumLabel.text = [NSString stringWithFormat:@"%.f%%",self.nlSlider.value/_nlSlider.maximumValue*100];
} }
} }
} }
...@@ -595,7 +611,7 @@ ...@@ -595,7 +611,7 @@
if (self.nlSlider == slider) { if (self.nlSlider == slider) {
float value = _nlSlider.value; float value = _nlSlider.value;
_nengliangNum = 100*value; _nengliangNum = 100*value;
_nlNumLabel.text = [NSString stringWithFormat:@"%.f%%",value/_nlSlider.maximumValue*100]; _nlNumLabel.text = [NSString stringWithFormat:@"%.f%%",value*100];
if (self.delegate && [self.delegate respondsToSelector:@selector(sendNengLangValue:)]) { if (self.delegate && [self.delegate respondsToSelector:@selector(sendNengLangValue:)]) {
[self.delegate sendNengLangValue:_nengliangNum]; [self.delegate sendNengLangValue:_nengliangNum];
...@@ -603,7 +619,7 @@ ...@@ -603,7 +619,7 @@
}else { }else {
float value = _wdSlider.value; float value = _wdSlider.value;
_wenduNum = 100*value; _wenduNum = 100*value;
_wdNumLabel.text = [NSString stringWithFormat:@"%.f%%",value/_wdSlider.maximumValue*100]; _wdNumLabel.text = [NSString stringWithFormat:@"%.f%%",value*100];
if (self.delegate && [self.delegate respondsToSelector:@selector(sendwenduValue:)]) { if (self.delegate && [self.delegate respondsToSelector:@selector(sendwenduValue:)]) {
[self.delegate sendwenduValue:_wenduNum]; [self.delegate sendwenduValue:_wenduNum];
...@@ -622,8 +638,7 @@ ...@@ -622,8 +638,7 @@
} }
}else { }else {
self.nlSlider.value = 0;
self.wdSlider.value = 0;
_nlNumLabel.text = [NSString stringWithFormat:@"%.f%%",self.nlSlider.value/_nlSlider.maximumValue*100]; _nlNumLabel.text = [NSString stringWithFormat:@"%.f%%",self.nlSlider.value/_nlSlider.maximumValue*100];
_wdNumLabel.text = [NSString stringWithFormat:@"%.f%%",self.wdSlider.value/_wdSlider.maximumValue*100]; _wdNumLabel.text = [NSString stringWithFormat:@"%.f%%",self.wdSlider.value/_wdSlider.maximumValue*100];
...@@ -646,15 +661,91 @@ ...@@ -646,15 +661,91 @@
} }
-(void)controlWenDu:(NSInteger)wenduNum AndNengLiangNum:(NSInteger)nengliangNum {
_nengliangNum = nengliangNum;
_wenduNum = wenduNum;
float value = _nengliangNum/100.f;
_nlSlider.value = value;
float value1 = _wenduNum/100.f;
_wdSlider.value = value1;
_nlNumLabel.text = [NSString stringWithFormat:@"%.f%%",self.nlSlider.value*100];
_wdNumLabel.text = [NSString stringWithFormat:@"%.f%%",self.wdSlider.value*100];
}
-(void)playVideoTime:(CGFloat)time { -(void)playVideoTime:(CGFloat)time {
[self.playerView seekToTime:time completionHandler:^(BOOL finished) { [self.playerView seekToTime:time completionHandler:^(BOOL finished) {
}]; }];
} }
-(void)playHotElecticVideo:(DXHFXVideoDetailsModel *)model {
NSURL *proxyURL = [KTVHTTPCache proxyURLWithOriginalURL:[NSURL URLWithString:self.videoModel.videoUrl]];
[self setTimeLineWithString:self.videoModel.describeInfo];
self.playerView.assetURL = proxyURL;
HJSelfWeak;
self.playerView.playerDidToEnd = ^(id _Nonnull asset) {
weakSelf.playerView.assetURL = proxyURL;
};
}
- (NSMutableArray *)setTimeLineWithString:(NSString *)describeInfo{
NSArray *itemTitleArray = [describeInfo componentsSeparatedByString:@","];
NSMutableArray *titleArray = [NSMutableArray array];
NSMutableArray *titleTimeArray = [NSMutableArray array];
NSMutableArray *timeArray = [NSMutableArray array];
for (int i = 0; i < itemTitleArray.count; i ++) {
NSArray *temparray = [itemTitleArray[i] componentsSeparatedByString:@":"];
[titleArray addObject:temparray[0]];
[titleTimeArray addObject:temparray[1]];
[timeArray addObject:temparray[2]];
}
NSMutableArray *titleTimeArray1 = [NSMutableArray array];
for (__strong NSString *titleTime in titleTimeArray) {
if([titleTime intValue] < 60){
if (!titleTime || [titleTime isEqualToString:@""]) {
titleTime = @"";
// titleTime = [NSString stringWithFormat:@"%@s",titleTime];
}else{
titleTime = [NSString stringWithFormat:@"%@s",titleTime];
}
}else if([titleTime intValue] % 60 == 0){
titleTime = [NSString stringWithFormat:@"%dmin",[titleTime intValue] / 60];
}else{
titleTime = [NSString stringWithFormat:@"%dmins %ds",[titleTime intValue] / 60,[titleTime intValue] % 60];
}
[titleTimeArray1 addObject:titleTime];
}
self.progressBarView.timeArray = nil;
self.timeArray = timeArray;
return timeArray;
}
-(void)topBtnClik:(UIButton *)button { -(void)topBtnClik:(UIButton *)button {
} }
-(void)setPlayerControllerPlay {
if([HJUserDefaults objectForKey:@"videoSwitchIsOn"]){
NSString *videoSwitchIsOn = [HJUserDefaults objectForKey:@"videoSwitchIsOn"];
if([videoSwitchIsOn isEqualToString:@"1"]){
_playerManager.shouldAutoPlay = YES;
}else{
_playerManager.shouldAutoPlay = NO;
[self.playerView.currentPlayerManager pause];
}
}else{
_playerManager.shouldAutoPlay = YES;
}
}
/* /*
// Only override drawRect: if you perform custom drawing. // Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation. // An empty implementation adversely affects performance during animation.
......
...@@ -30,11 +30,10 @@ PODS: ...@@ -30,11 +30,10 @@ PODS:
- MJRefresh (3.7.5) - MJRefresh (3.7.5)
- SDCycleScrollView (1.82): - SDCycleScrollView (1.82):
- SDWebImage (>= 5.0.0) - SDWebImage (>= 5.0.0)
- SDWebImage (5.15.5): - SDWebImage (5.15.0):
- SDWebImage/Core (= 5.15.5) - SDWebImage/Core (= 5.15.0)
- SDWebImage/Core (5.15.5) - SDWebImage/Core (5.15.0)
- SVProgressHUD (2.2.5) - SVProgressHUD (2.2.5)
- YModemLib (1.0.2)
- ZFPlayer (4.1.4): - ZFPlayer (4.1.4):
- ZFPlayer/Core (= 4.1.4) - ZFPlayer/Core (= 4.1.4)
- ZFPlayer/AVPlayer (4.1.4): - ZFPlayer/AVPlayer (4.1.4):
...@@ -59,7 +58,6 @@ DEPENDENCIES: ...@@ -59,7 +58,6 @@ DEPENDENCIES:
- MJRefresh - MJRefresh
- SDCycleScrollView - SDCycleScrollView
- SVProgressHUD - SVProgressHUD
- YModemLib (~> 1.0.2)
- ZFPlayer (~> 4.0) - ZFPlayer (~> 4.0)
- ZFPlayer/AVPlayer (~> 4.0) - ZFPlayer/AVPlayer (~> 4.0)
- ZFPlayer/ControlView (~> 4.0) - ZFPlayer/ControlView (~> 4.0)
...@@ -83,11 +81,10 @@ SPEC REPOS: ...@@ -83,11 +81,10 @@ SPEC REPOS:
- SDCycleScrollView - SDCycleScrollView
- SDWebImage - SDWebImage
- SVProgressHUD - SVProgressHUD
- YModemLib
- ZFPlayer - ZFPlayer
SPEC CHECKSUMS: SPEC CHECKSUMS:
AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce AFNetworking: 3bd23d814e976cd148d7d44c3ab78017b744cd58
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
CocoaSecurity: d288a6f87e0f363823d2cb83e753814a6944f71a CocoaSecurity: d288a6f87e0f363823d2cb83e753814a6944f71a
GVUserDefaults: 52d48cf8ba578b40a1a76312b196dfc9134ba36a GVUserDefaults: 52d48cf8ba578b40a1a76312b196dfc9134ba36a
...@@ -101,11 +98,10 @@ SPEC CHECKSUMS: ...@@ -101,11 +98,10 @@ SPEC CHECKSUMS:
MJExtension: 21c5f6f8c4d5d8844b7ae8fbae08fed0b501f961 MJExtension: 21c5f6f8c4d5d8844b7ae8fbae08fed0b501f961
MJRefresh: fdf5e979eb406a0341468932d1dfc8b7f9fce961 MJRefresh: fdf5e979eb406a0341468932d1dfc8b7f9fce961
SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf
SDWebImage: fd7e1a22f00303e058058278639bf6196ee431fe SDWebImage: 9bec4c5cdd9579e1f57104735ee0c37df274d593
SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6 SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6
YModemLib: a995cb5b9b9d6cfeca57f38471978a41d6ee48e9
ZFPlayer: 5cf39e8d9f0c2394a014b0db4767b5b5a6bffe13 ZFPlayer: 5cf39e8d9f0c2394a014b0db4767b5b5a6bffe13
PODFILE CHECKSUM: 3f9b52144082886c6940965f9d5fc0faa07487bc PODFILE CHECKSUM: 4aa20ac5d118c867182d36b173401ec8541541a6
COCOAPODS: 1.11.2 COCOAPODS: 1.11.2
...@@ -30,11 +30,10 @@ PODS: ...@@ -30,11 +30,10 @@ PODS:
- MJRefresh (3.7.5) - MJRefresh (3.7.5)
- SDCycleScrollView (1.82): - SDCycleScrollView (1.82):
- SDWebImage (>= 5.0.0) - SDWebImage (>= 5.0.0)
- SDWebImage (5.15.5): - SDWebImage (5.15.0):
- SDWebImage/Core (= 5.15.5) - SDWebImage/Core (= 5.15.0)
- SDWebImage/Core (5.15.5) - SDWebImage/Core (5.15.0)
- SVProgressHUD (2.2.5) - SVProgressHUD (2.2.5)
- YModemLib (1.0.2)
- ZFPlayer (4.1.4): - ZFPlayer (4.1.4):
- ZFPlayer/Core (= 4.1.4) - ZFPlayer/Core (= 4.1.4)
- ZFPlayer/AVPlayer (4.1.4): - ZFPlayer/AVPlayer (4.1.4):
...@@ -59,7 +58,6 @@ DEPENDENCIES: ...@@ -59,7 +58,6 @@ DEPENDENCIES:
- MJRefresh - MJRefresh
- SDCycleScrollView - SDCycleScrollView
- SVProgressHUD - SVProgressHUD
- YModemLib (~> 1.0.2)
- ZFPlayer (~> 4.0) - ZFPlayer (~> 4.0)
- ZFPlayer/AVPlayer (~> 4.0) - ZFPlayer/AVPlayer (~> 4.0)
- ZFPlayer/ControlView (~> 4.0) - ZFPlayer/ControlView (~> 4.0)
...@@ -83,11 +81,10 @@ SPEC REPOS: ...@@ -83,11 +81,10 @@ SPEC REPOS:
- SDCycleScrollView - SDCycleScrollView
- SDWebImage - SDWebImage
- SVProgressHUD - SVProgressHUD
- YModemLib
- ZFPlayer - ZFPlayer
SPEC CHECKSUMS: SPEC CHECKSUMS:
AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce AFNetworking: 3bd23d814e976cd148d7d44c3ab78017b744cd58
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
CocoaSecurity: d288a6f87e0f363823d2cb83e753814a6944f71a CocoaSecurity: d288a6f87e0f363823d2cb83e753814a6944f71a
GVUserDefaults: 52d48cf8ba578b40a1a76312b196dfc9134ba36a GVUserDefaults: 52d48cf8ba578b40a1a76312b196dfc9134ba36a
...@@ -101,11 +98,10 @@ SPEC CHECKSUMS: ...@@ -101,11 +98,10 @@ SPEC CHECKSUMS:
MJExtension: 21c5f6f8c4d5d8844b7ae8fbae08fed0b501f961 MJExtension: 21c5f6f8c4d5d8844b7ae8fbae08fed0b501f961
MJRefresh: fdf5e979eb406a0341468932d1dfc8b7f9fce961 MJRefresh: fdf5e979eb406a0341468932d1dfc8b7f9fce961
SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf
SDWebImage: fd7e1a22f00303e058058278639bf6196ee431fe SDWebImage: 9bec4c5cdd9579e1f57104735ee0c37df274d593
SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6 SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6
YModemLib: a995cb5b9b9d6cfeca57f38471978a41d6ee48e9
ZFPlayer: 5cf39e8d9f0c2394a014b0db4767b5b5a6bffe13 ZFPlayer: 5cf39e8d9f0c2394a014b0db4767b5b5a6bffe13
PODFILE CHECKSUM: 3f9b52144082886c6940965f9d5fc0faa07487bc PODFILE CHECKSUM: 4aa20ac5d118c867182d36b173401ec8541541a6
COCOAPODS: 1.11.2 COCOAPODS: 1.11.2
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "0130B3724283586C0E9D2A112D4F2AA1"
BuildableName = "AFNetworking.framework"
BlueprintName = "AFNetworking"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6083682834ABE0AE7BD1CBF06CADD036"
BuildableName = "CocoaAsyncSocket.framework"
BlueprintName = "CocoaAsyncSocket"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "EECEFE3E704A038F8532197F7F483302"
BuildableName = "CocoaSecurity.framework"
BlueprintName = "CocoaSecurity"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "AD364BEC9F48BB6838C4913361D55A9F"
BuildableName = "GVUserDefaults.framework"
BlueprintName = "GVUserDefaults"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "7281195861A7714E4972777A27C77BBC"
BuildableName = "IJKMediaFramework"
BlueprintName = "IJKMediaFramework"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "FBA456CB50E371584C11231929A0971E"
BuildableName = "IQKeyboardManager.framework"
BlueprintName = "IQKeyboardManager"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "E8572772A2B42B68FDF351C752B8A238"
BuildableName = "JZLocationConverter.framework"
BlueprintName = "JZLocationConverter"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "105186B500AA09A533997F3D16DF7B9E"
BuildableName = "KTVCocoaHTTPServer.framework"
BlueprintName = "KTVCocoaHTTPServer"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8CA0CD098B97A1205DEA694FA044A1C2"
BuildableName = "KTVHTTPCache.framework"
BlueprintName = "KTVHTTPCache"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "82B0A41D3031FF27D78E17B0A9A46FB0"
BuildableName = "MBProgressHUD.framework"
BlueprintName = "MBProgressHUD"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "4D3BA58D0583DF37575CACAB3DDADC85"
BuildableName = "MJExtension.framework"
BlueprintName = "MJExtension"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6868056D761E163D10FDAF8CF1C4D9B8"
BuildableName = "MJRefresh.framework"
BlueprintName = "MJRefresh"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "55AF53E6C77A10ED4985E04D74A8878E"
BuildableName = "Masonry.framework"
BlueprintName = "Masonry"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "53A1C16A1948B1223752744D56459E7B"
BuildableName = "Pods_DJMHomeDR.framework"
BlueprintName = "Pods-DJMHomeDR"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "56328E3ED25FCBD596B80568707E5FFE"
BuildableName = "Pods_DJMHomeTY.framework"
BlueprintName = "Pods-DJMHomeTY"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "9937574A3F3832B33C70529595EEA5E8"
BuildableName = "Pods_DJMPS2.framework"
BlueprintName = "Pods-DJMPS2"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "65A8F27B267694F5B6C3118249A09185"
BuildableName = "Pods_HJMDrWarter.framework"
BlueprintName = "Pods-HJMDrWarter"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "CBED833AAD6266F3AEFE9BE31C68E094"
BuildableName = "SDCycleScrollView.framework"
BlueprintName = "SDCycleScrollView"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3847153A6E5EEFB86565BA840768F429"
BuildableName = "SDWebImage.framework"
BlueprintName = "SDWebImage"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1C8D67D8B72D6BA42CCEDB648537A340"
BuildableName = "SVProgressHUD.framework"
BlueprintName = "SVProgressHUD"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "93FD1F93E0C30B2749BD8A6EC148F233"
BuildableName = "ZFPlayer.framework"
BlueprintName = "ZFPlayer"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?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>AFNetworking.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>CocoaAsyncSocket.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>CocoaSecurity.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>GVUserDefaults.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>IJKMediaFramework.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>IQKeyboardManager.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>JZLocationConverter.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>KTVCocoaHTTPServer.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>KTVHTTPCache.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>MBProgressHUD.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>MJExtension.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>MJRefresh.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>Masonry.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>Pods-DJMHomeDR.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>Pods-DJMHomeTY.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>Pods-DJMPS2.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>Pods-HJMDrWarter.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>SDCycleScrollView.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>SDWebImage.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>SVProgressHUD.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>ZFPlayer.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict/>
</dict>
</plist>
...@@ -14,8 +14,6 @@ ...@@ -14,8 +14,6 @@
This library provides an async image downloader with cache support. For convenience, we added categories for UI elements like `UIImageView`, `UIButton`, `MKAnnotationView`. This library provides an async image downloader with cache support. For convenience, we added categories for UI elements like `UIImageView`, `UIButton`, `MKAnnotationView`.
Note: `SD` is the prefix for **Simple Design** (which is the team name in Daily Motion company from the author Olivier Poitrey)
## Features ## Features
- [x] Categories for `UIImageView`, `UIButton`, `MKAnnotationView` adding web image and cache management - [x] Categories for `UIImageView`, `UIButton`, `MKAnnotationView` adding web image and cache management
......
...@@ -124,6 +124,7 @@ static CGFloat SDImageScaleFromPath(NSString *string) { ...@@ -124,6 +124,7 @@ static CGFloat SDImageScaleFromPath(NSString *string) {
if (!data || data.length == 0) { if (!data || data.length == 0) {
return nil; return nil;
} }
data = [data copy]; // avoid mutable data
id<SDAnimatedImageCoder> animatedCoder = nil; id<SDAnimatedImageCoder> animatedCoder = nil;
for (id<SDImageCoder>coder in [SDImageCodersManager sharedManager].coders.reverseObjectEnumerator) { for (id<SDImageCoder>coder in [SDImageCodersManager sharedManager].coders.reverseObjectEnumerator) {
if ([coder conformsToProtocol:@protocol(SDAnimatedImageCoder)]) { if ([coder conformsToProtocol:@protocol(SDAnimatedImageCoder)]) {
......
...@@ -90,7 +90,6 @@ ...@@ -90,7 +90,6 @@
if (!_fetchQueue) { if (!_fetchQueue) {
_fetchQueue = [[NSOperationQueue alloc] init]; _fetchQueue = [[NSOperationQueue alloc] init];
_fetchQueue.maxConcurrentOperationCount = 1; _fetchQueue.maxConcurrentOperationCount = 1;
_fetchQueue.name = @"com.hackemist.SDAnimatedImagePlayer.fetchQueue";
} }
return _fetchQueue; return _fetchQueue;
} }
...@@ -249,9 +248,9 @@ ...@@ -249,9 +248,9 @@
} else if (self.playbackMode == SDAnimatedImagePlaybackModeBounce || } else if (self.playbackMode == SDAnimatedImagePlaybackModeBounce ||
self.playbackMode == SDAnimatedImagePlaybackModeReversedBounce) { self.playbackMode == SDAnimatedImagePlaybackModeReversedBounce) {
if (currentFrameIndex == 0) { if (currentFrameIndex == 0) {
self.shouldReverse = NO; self.shouldReverse = false;
} else if (currentFrameIndex == totalFrameCount - 1) { } else if (currentFrameIndex == totalFrameCount - 1) {
self.shouldReverse = YES; self.shouldReverse = true;
} }
nextFrameIndex = self.shouldReverse ? (currentFrameIndex - 1) : (currentFrameIndex + 1); nextFrameIndex = self.shouldReverse ? (currentFrameIndex - 1) : (currentFrameIndex + 1);
nextFrameIndex %= totalFrameCount; nextFrameIndex %= totalFrameCount;
......
...@@ -45,10 +45,10 @@ typedef NS_ENUM(NSUInteger, SDCallbackPolicy) { ...@@ -45,10 +45,10 @@ typedef NS_ENUM(NSUInteger, SDCallbackPolicy) {
/// Submits a block for execution and returns after that block finishes executing. /// Submits a block for execution and returns after that block finishes executing.
/// - Parameter block: The block that contains the work to perform. /// - Parameter block: The block that contains the work to perform.
- (void)sync:(nonnull dispatch_block_t)block; - (void)sync:(nonnull NS_NOESCAPE dispatch_block_t)block;
/// Schedules a block asynchronously for execution. /// Schedules a block asynchronously for execution.
/// - Parameter block: The block that contains the work to perform. /// - Parameter block: The block that contains the work to perform.
- (void)async:(nonnull dispatch_block_t)block; - (void)async:(nonnull NS_NOESCAPE dispatch_block_t)block;
@end @end
...@@ -79,7 +79,7 @@ static void inline SDSafeExecute(dispatch_queue_t _Nonnull queue, dispatch_block ...@@ -79,7 +79,7 @@ static void inline SDSafeExecute(dispatch_queue_t _Nonnull queue, dispatch_block
return queue; return queue;
} }
- (void)sync:(nonnull dispatch_block_t)block { - (void)sync:(nonnull NS_NOESCAPE dispatch_block_t)block {
switch (self.policy) { switch (self.policy) {
case SDCallbackPolicySafeExecute: case SDCallbackPolicySafeExecute:
SDSafeExecute(self.queue, block, NO); SDSafeExecute(self.queue, block, NO);
...@@ -93,7 +93,7 @@ static void inline SDSafeExecute(dispatch_queue_t _Nonnull queue, dispatch_block ...@@ -93,7 +93,7 @@ static void inline SDSafeExecute(dispatch_queue_t _Nonnull queue, dispatch_block
} }
} }
- (void)async:(nonnull dispatch_block_t)block { - (void)async:(nonnull NS_NOESCAPE dispatch_block_t)block {
switch (self.policy) { switch (self.policy) {
case SDCallbackPolicySafeExecute: case SDCallbackPolicySafeExecute:
SDSafeExecute(self.queue, block, YES); SDSafeExecute(self.queue, block, YES);
......
...@@ -63,7 +63,7 @@ static NSString * _defaultDiskCacheDirectory; ...@@ -63,7 +63,7 @@ static NSString * _defaultDiskCacheDirectory;
@property (nonatomic, strong, readwrite, nonnull) id<SDDiskCache> diskCache; @property (nonatomic, strong, readwrite, nonnull) id<SDDiskCache> diskCache;
@property (nonatomic, copy, readwrite, nonnull) SDImageCacheConfig *config; @property (nonatomic, copy, readwrite, nonnull) SDImageCacheConfig *config;
@property (nonatomic, copy, readwrite, nonnull) NSString *diskCachePath; @property (nonatomic, copy, readwrite, nonnull) NSString *diskCachePath;
@property (nonatomic, strong, nonnull) dispatch_queue_t ioQueue; @property (nonatomic, strong, nullable) dispatch_queue_t ioQueue;
@end @end
...@@ -118,7 +118,7 @@ static NSString * _defaultDiskCacheDirectory; ...@@ -118,7 +118,7 @@ static NSString * _defaultDiskCacheDirectory;
// Create IO queue // Create IO queue
dispatch_queue_attr_t ioQueueAttributes = _config.ioQueueAttributes; dispatch_queue_attr_t ioQueueAttributes = _config.ioQueueAttributes;
_ioQueue = dispatch_queue_create("com.hackemist.SDImageCache.ioQueue", ioQueueAttributes); _ioQueue = dispatch_queue_create("com.hackemist.SDImageCache", ioQueueAttributes);
NSAssert(_ioQueue, @"The IO queue should not be nil. Your configured `ioQueueAttributes` may be wrong"); NSAssert(_ioQueue, @"The IO queue should not be nil. Your configured `ioQueueAttributes` may be wrong");
// Init the memory cache // Init the memory cache
...@@ -419,9 +419,6 @@ static NSString * _defaultDiskCacheDirectory; ...@@ -419,9 +419,6 @@ static NSString * _defaultDiskCacheDirectory;
} }
- (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context { - (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key options:(SDImageCacheOptions)options context:(nullable SDWebImageContext *)context {
if (!key) {
return nil;
}
NSData *data = [self diskImageDataForKey:key]; NSData *data = [self diskImageDataForKey:key];
UIImage *diskImage = [self diskImageForKey:key data:data options:options context:context]; UIImage *diskImage = [self diskImageForKey:key data:data options:options context:context];
...@@ -510,10 +507,11 @@ static NSString * _defaultDiskCacheDirectory; ...@@ -510,10 +507,11 @@ static NSString * _defaultDiskCacheDirectory;
} }
- (nullable UIImage *)diskImageForKey:(nullable NSString *)key { - (nullable UIImage *)diskImageForKey:(nullable NSString *)key {
if (!key) {
return nil;
}
NSData *data = [self diskImageDataForKey:key]; NSData *data = [self diskImageDataForKey:key];
return [self diskImageForKey:key data:data];
}
- (nullable UIImage *)diskImageForKey:(nullable NSString *)key data:(nullable NSData *)data {
return [self diskImageForKey:key data:data options:0 context:nil]; return [self diskImageForKey:key data:data options:0 context:nil];
} }
...@@ -527,7 +525,7 @@ static NSString * _defaultDiskCacheDirectory; ...@@ -527,7 +525,7 @@ static NSString * _defaultDiskCacheDirectory;
} }
- (void)_unarchiveObjectWithImage:(UIImage *)image forKey:(NSString *)key { - (void)_unarchiveObjectWithImage:(UIImage *)image forKey:(NSString *)key {
if (!image || !key) { if (!image) {
return; return;
} }
// Check extended data // Check extended data
...@@ -727,7 +725,7 @@ static NSString * _defaultDiskCacheDirectory; ...@@ -727,7 +725,7 @@ static NSString * _defaultDiskCacheDirectory;
} }
- (void)removeImageForKey:(nullable NSString *)key fromMemory:(BOOL)fromMemory fromDisk:(BOOL)fromDisk withCompletion:(nullable SDWebImageNoParamsBlock)completion { - (void)removeImageForKey:(nullable NSString *)key fromMemory:(BOOL)fromMemory fromDisk:(BOOL)fromDisk withCompletion:(nullable SDWebImageNoParamsBlock)completion {
if (!key) { if (key == nil) {
return; return;
} }
......
...@@ -409,7 +409,7 @@ static CGImageRef __nullable SDCGImageCreateCopy(CGImageRef cg_nullable image) { ...@@ -409,7 +409,7 @@ static CGImageRef __nullable SDCGImageCreateCopy(CGImageRef cg_nullable image) {
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, (__bridge CFDictionaryRef)creatingOptions); CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, (__bridge CFDictionaryRef)creatingOptions);
if (!source) { if (!source) {
// Try again without UTType hint, the call site from user may provide the wrong UTType // Try again without UTType hint, the call site from user may provide the wrong UTType
source = CGImageSourceCreateWithData((__bridge CFDataRef)data, nil); source = CGImageSourceCreateWithData((__bridge CFDataRef)data, (__bridge CFDictionaryRef)creatingOptions);
} }
if (!source) { if (!source) {
return nil; return nil;
......
...@@ -202,7 +202,7 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination ...@@ -202,7 +202,7 @@ static NSString * kSDCGImageDestinationRequestedFileSize = @"kCGImageDestination
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, (__bridge CFDictionaryRef)creatingOptions); CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, (__bridge CFDictionaryRef)creatingOptions);
if (!source) { if (!source) {
// Try again without UTType hint, the call site from user may provide the wrong UTType // Try again without UTType hint, the call site from user may provide the wrong UTType
source = CGImageSourceCreateWithData((__bridge CFDataRef)data, nil); source = CGImageSourceCreateWithData((__bridge CFDataRef)data, (__bridge CFDictionaryRef)creatingOptions);
} }
if (!source) { if (!source) {
return nil; return nil;
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#import "SDWebImageCacheKeyFilter.h" #import "SDWebImageCacheKeyFilter.h"
#import "SDImageCacheDefine.h" #import "SDImageCacheDefine.h"
#import "SDInternalMacros.h" #import "SDInternalMacros.h"
#import "objc/runtime.h"
NSNotificationName const SDWebImageDownloadStartNotification = @"SDWebImageDownloadStartNotification"; NSNotificationName const SDWebImageDownloadStartNotification = @"SDWebImageDownloadStartNotification";
NSNotificationName const SDWebImageDownloadReceiveResponseNotification = @"SDWebImageDownloadReceiveResponseNotification"; NSNotificationName const SDWebImageDownloadReceiveResponseNotification = @"SDWebImageDownloadReceiveResponseNotification";
...@@ -21,22 +20,6 @@ NSNotificationName const SDWebImageDownloadStopNotification = @"SDWebImageDownlo ...@@ -21,22 +20,6 @@ NSNotificationName const SDWebImageDownloadStopNotification = @"SDWebImageDownlo
NSNotificationName const SDWebImageDownloadFinishNotification = @"SDWebImageDownloadFinishNotification"; NSNotificationName const SDWebImageDownloadFinishNotification = @"SDWebImageDownloadFinishNotification";
static void * SDWebImageDownloaderContext = &SDWebImageDownloaderContext; static void * SDWebImageDownloaderContext = &SDWebImageDownloaderContext;
static void * SDWebImageDownloaderOperationKey = &SDWebImageDownloaderOperationKey;
BOOL SDWebImageDownloaderOperationGetCompleted(id<SDWebImageDownloaderOperation> operation) {
NSCParameterAssert(operation);
NSNumber *value = objc_getAssociatedObject(operation, SDWebImageDownloaderOperationKey);
if (value != nil) {
return value.boolValue;
} else {
return NO;
}
}
void SDWebImageDownloaderOperationSetCompleted(id<SDWebImageDownloaderOperation> operation, BOOL isCompleted) {
NSCParameterAssert(operation);
objc_setAssociatedObject(operation, SDWebImageDownloaderOperationKey, @(isCompleted), OBJC_ASSOCIATION_RETAIN);
}
@interface SDWebImageDownloadToken () @interface SDWebImageDownloadToken ()
...@@ -116,7 +99,7 @@ void SDWebImageDownloaderOperationSetCompleted(id<SDWebImageDownloaderOperation> ...@@ -116,7 +99,7 @@ void SDWebImageDownloaderOperationSetCompleted(id<SDWebImageDownloaderOperation>
[_config addObserver:self forKeyPath:NSStringFromSelector(@selector(maxConcurrentDownloads)) options:0 context:SDWebImageDownloaderContext]; [_config addObserver:self forKeyPath:NSStringFromSelector(@selector(maxConcurrentDownloads)) options:0 context:SDWebImageDownloaderContext];
_downloadQueue = [NSOperationQueue new]; _downloadQueue = [NSOperationQueue new];
_downloadQueue.maxConcurrentOperationCount = _config.maxConcurrentDownloads; _downloadQueue.maxConcurrentOperationCount = _config.maxConcurrentDownloads;
_downloadQueue.name = @"com.hackemist.SDWebImageDownloader.downloadQueue"; _downloadQueue.name = @"com.hackemist.SDWebImageDownloader";
_URLOperations = [NSMutableDictionary new]; _URLOperations = [NSMutableDictionary new];
NSMutableDictionary<NSString *, NSString *> *headerDictionary = [NSMutableDictionary dictionary]; NSMutableDictionary<NSString *, NSString *> *headerDictionary = [NSMutableDictionary dictionary];
NSString *userAgent = nil; NSString *userAgent = nil;
...@@ -223,6 +206,7 @@ void SDWebImageDownloaderOperationSetCompleted(id<SDWebImageDownloaderOperation> ...@@ -223,6 +206,7 @@ void SDWebImageDownloaderOperationSetCompleted(id<SDWebImageDownloaderOperation>
return nil; return nil;
} }
SD_LOCK(_operationsLock);
id downloadOperationCancelToken; id downloadOperationCancelToken;
// When different thumbnail size download with same url, we need to make sure each callback called with desired size // When different thumbnail size download with same url, we need to make sure each callback called with desired size
id<SDWebImageCacheKeyFilter> cacheKeyFilter = context[SDWebImageContextCacheKeyFilter]; id<SDWebImageCacheKeyFilter> cacheKeyFilter = context[SDWebImageContextCacheKeyFilter];
...@@ -233,18 +217,9 @@ void SDWebImageDownloaderOperationSetCompleted(id<SDWebImageDownloaderOperation> ...@@ -233,18 +217,9 @@ void SDWebImageDownloaderOperationSetCompleted(id<SDWebImageDownloaderOperation>
cacheKey = url.absoluteString; cacheKey = url.absoluteString;
} }
SDImageCoderOptions *decodeOptions = SDGetDecodeOptionsFromContext(context, [self.class imageOptionsFromDownloaderOptions:options], cacheKey); SDImageCoderOptions *decodeOptions = SDGetDecodeOptionsFromContext(context, [self.class imageOptionsFromDownloaderOptions:options], cacheKey);
SD_LOCK(_operationsLock);
NSOperation<SDWebImageDownloaderOperation> *operation = [self.URLOperations objectForKey:url]; NSOperation<SDWebImageDownloaderOperation> *operation = [self.URLOperations objectForKey:url];
// There is a case that the operation may be marked as finished or cancelled, but not been removed from `self.URLOperations`. // There is a case that the operation may be marked as finished or cancelled, but not been removed from `self.URLOperations`.
BOOL shouldNotReuseOperation; if (!operation || operation.isFinished || operation.isCancelled) {
if (operation) {
@synchronized (operation) {
shouldNotReuseOperation = operation.isFinished || operation.isCancelled || SDWebImageDownloaderOperationGetCompleted(operation);
}
} else {
shouldNotReuseOperation = YES;
}
if (shouldNotReuseOperation) {
operation = [self createDownloaderOperationWithUrl:url options:options context:context]; operation = [self createDownloaderOperationWithUrl:url options:options context:context];
if (!operation) { if (!operation) {
SD_UNLOCK(_operationsLock); SD_UNLOCK(_operationsLock);
...@@ -276,6 +251,15 @@ void SDWebImageDownloaderOperationSetCompleted(id<SDWebImageDownloaderOperation> ...@@ -276,6 +251,15 @@ void SDWebImageDownloaderOperationSetCompleted(id<SDWebImageDownloaderOperation>
@synchronized (operation) { @synchronized (operation) {
downloadOperationCancelToken = [operation addHandlersForProgress:progressBlock completed:completedBlock decodeOptions:decodeOptions]; downloadOperationCancelToken = [operation addHandlersForProgress:progressBlock completed:completedBlock decodeOptions:decodeOptions];
} }
if (!operation.isExecuting) {
if (options & SDWebImageDownloaderHighPriority) {
operation.queuePriority = NSOperationQueuePriorityHigh;
} else if (options & SDWebImageDownloaderLowPriority) {
operation.queuePriority = NSOperationQueuePriorityLow;
} else {
operation.queuePriority = NSOperationQueuePriorityNormal;
}
}
} }
SD_UNLOCK(_operationsLock); SD_UNLOCK(_operationsLock);
...@@ -515,12 +499,6 @@ didReceiveResponse:(NSURLResponse *)response ...@@ -515,12 +499,6 @@ didReceiveResponse:(NSURLResponse *)response
// Identify the operation that runs this task and pass it the delegate method // Identify the operation that runs this task and pass it the delegate method
NSOperation<SDWebImageDownloaderOperation> *dataOperation = [self operationWithTask:task]; NSOperation<SDWebImageDownloaderOperation> *dataOperation = [self operationWithTask:task];
if (dataOperation) {
@synchronized (dataOperation) {
// Mark the downloader operation `isCompleted = YES`, no longer re-use this operation when new request comes in
SDWebImageDownloaderOperationSetCompleted(dataOperation, YES);
}
}
if ([dataOperation respondsToSelector:@selector(URLSession:task:didCompleteWithError:)]) { if ([dataOperation respondsToSelector:@selector(URLSession:task:didCompleteWithError:)]) {
[dataOperation URLSession:session task:task didCompleteWithError:error]; [dataOperation URLSession:session task:task didCompleteWithError:error];
} }
......
...@@ -14,8 +14,6 @@ ...@@ -14,8 +14,6 @@
#import "SDImageCacheDefine.h" #import "SDImageCacheDefine.h"
#import "SDCallbackQueue.h" #import "SDCallbackQueue.h"
BOOL SDWebImageDownloaderOperationGetCompleted(id<SDWebImageDownloaderOperation> operation); // Private currently, mark open if needed
// A handler to represent individual request // A handler to represent individual request
@interface SDWebImageDownloaderOperationToken : NSObject @interface SDWebImageDownloaderOperationToken : NSObject
...@@ -112,9 +110,8 @@ BOOL SDWebImageDownloaderOperationGetCompleted(id<SDWebImageDownloaderOperation> ...@@ -112,9 +110,8 @@ BOOL SDWebImageDownloaderOperationGetCompleted(id<SDWebImageDownloaderOperation>
_finished = NO; _finished = NO;
_expectedSize = 0; _expectedSize = 0;
_unownedSession = session; _unownedSession = session;
_coderQueue = [[NSOperationQueue alloc] init]; _coderQueue = [NSOperationQueue new];
_coderQueue.maxConcurrentOperationCount = 1; _coderQueue.maxConcurrentOperationCount = 1;
_coderQueue.name = @"com.hackemist.SDWebImageDownloaderOperation.coderQueue";
_imageMap = [[NSMapTable alloc] initWithKeyOptions:NSPointerFunctionsStrongMemory valueOptions:NSPointerFunctionsWeakMemory capacity:1]; _imageMap = [[NSMapTable alloc] initWithKeyOptions:NSPointerFunctionsStrongMemory valueOptions:NSPointerFunctionsWeakMemory capacity:1];
#if SD_UIKIT #if SD_UIKIT
_backgroundTaskId = UIBackgroundTaskInvalid; _backgroundTaskId = UIBackgroundTaskInvalid;
...@@ -234,10 +231,13 @@ BOOL SDWebImageDownloaderOperationGetCompleted(id<SDWebImageDownloaderOperation> ...@@ -234,10 +231,13 @@ BOOL SDWebImageDownloaderOperationGetCompleted(id<SDWebImageDownloaderOperation>
if (self.dataTask) { if (self.dataTask) {
if (self.options & SDWebImageDownloaderHighPriority) { if (self.options & SDWebImageDownloaderHighPriority) {
self.dataTask.priority = NSURLSessionTaskPriorityHigh; self.dataTask.priority = NSURLSessionTaskPriorityHigh;
self.coderQueue.qualityOfService = NSQualityOfServiceUserInteractive;
} else if (self.options & SDWebImageDownloaderLowPriority) { } else if (self.options & SDWebImageDownloaderLowPriority) {
self.dataTask.priority = NSURLSessionTaskPriorityLow; self.dataTask.priority = NSURLSessionTaskPriorityLow;
self.coderQueue.qualityOfService = NSQualityOfServiceBackground;
} else { } else {
self.dataTask.priority = NSURLSessionTaskPriorityDefault; self.dataTask.priority = NSURLSessionTaskPriorityDefault;
self.coderQueue.qualityOfService = NSQualityOfServiceDefault;
} }
[self.dataTask resume]; [self.dataTask resume];
NSArray<SDWebImageDownloaderOperationToken *> *tokens; NSArray<SDWebImageDownloaderOperationToken *> *tokens;
...@@ -334,7 +334,7 @@ BOOL SDWebImageDownloaderOperationGetCompleted(id<SDWebImageDownloaderOperation> ...@@ -334,7 +334,7 @@ BOOL SDWebImageDownloaderOperationGetCompleted(id<SDWebImageDownloaderOperation>
[self didChangeValueForKey:@"isExecuting"]; [self didChangeValueForKey:@"isExecuting"];
} }
- (BOOL)isAsynchronous { - (BOOL)isConcurrent {
return YES; return YES;
} }
...@@ -471,24 +471,22 @@ didReceiveResponse:(NSURLResponse *)response ...@@ -471,24 +471,22 @@ didReceiveResponse:(NSURLResponse *)response
if (self.coderQueue.operationCount == 0) { if (self.coderQueue.operationCount == 0) {
// NSOperation have autoreleasepool, don't need to create extra one // NSOperation have autoreleasepool, don't need to create extra one
@weakify(self); @weakify(self);
[self.coderQueue addOperationWithBlock:^{ NSOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
@strongify(self); @strongify(self);
if (!self) { if (!self) {
return; return;
} }
// When cancelled or transfer finished (`didCompleteWithError`), cancel the progress callback, only completed block is called and enough UIImage *image = SDImageLoaderDecodeProgressiveImageData(imageData, self.request.URL, NO, self, [[self class] imageOptionsFromDownloaderOptions:self.options], self.context);
@synchronized (self) { if (self.isFinished) {
if (self.isCancelled || SDWebImageDownloaderOperationGetCompleted(self)) {
return; return;
} }
}
UIImage *image = SDImageLoaderDecodeProgressiveImageData(imageData, self.request.URL, NO, self, [[self class] imageOptionsFromDownloaderOptions:self.options], self.context);
if (image) { if (image) {
// We do not keep the progressive decoding image even when `finished`=YES. Because they are for view rendering but not take full function from downloader options. And some coders implementation may not keep consistent between progressive decoding and normal decoding. // We do not keep the progressive decoding image even when `finished`=YES. Because they are for view rendering but not take full function from downloader options. And some coders implementation may not keep consistent between progressive decoding and normal decoding.
[self callCompletionBlocksWithImage:image imageData:nil error:nil finished:NO]; [self callCompletionBlocksWithImage:image imageData:nil error:nil finished:NO];
} }
}]; }];
[self.coderQueue addOperation:operation];
} }
} }
...@@ -566,8 +564,16 @@ didReceiveResponse:(NSURLResponse *)response ...@@ -566,8 +564,16 @@ didReceiveResponse:(NSURLResponse *)response
// decode the image in coder queue, cancel all previous decoding process // decode the image in coder queue, cancel all previous decoding process
[self.coderQueue cancelAllOperations]; [self.coderQueue cancelAllOperations];
@weakify(self); @weakify(self);
// call done after all different variant completed block was dispatched
NSOperation *doneOperation = [NSBlockOperation blockOperationWithBlock:^{
@strongify(self);
if (!self) {
return;
}
[self done];
}];
for (SDWebImageDownloaderOperationToken *token in tokens) { for (SDWebImageDownloaderOperationToken *token in tokens) {
[self.coderQueue addOperationWithBlock:^{ NSOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
@strongify(self); @strongify(self);
if (!self) { if (!self) {
return; return;
...@@ -601,28 +607,16 @@ didReceiveResponse:(NSURLResponse *)response ...@@ -601,28 +607,16 @@ didReceiveResponse:(NSURLResponse *)response
CGSize imageSize = image.size; CGSize imageSize = image.size;
if (imageSize.width == 0 || imageSize.height == 0) { if (imageSize.width == 0 || imageSize.height == 0) {
NSString *description = image == nil ? @"Downloaded image decode failed" : @"Downloaded image has 0 pixels"; NSString *description = image == nil ? @"Downloaded image decode failed" : @"Downloaded image has 0 pixels";
NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorBadImageData userInfo:@{NSLocalizedDescriptionKey : description}]; [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorBadImageData userInfo:@{NSLocalizedDescriptionKey : description}]];
[self callCompletionBlockWithToken:token image:nil imageData:nil error:error finished:YES];
} else { } else {
[self callCompletionBlockWithToken:token image:image imageData:imageData error:nil finished:YES]; [self callCompletionBlockWithToken:token image:image imageData:imageData error:nil finished:YES];
} }
}]; }];
[doneOperation addDependency:operation];
[self.coderQueue addOperation:operation];
} }
// call [self done] after all completed block was dispatched // call [self done] after all completed block was dispatched
dispatch_block_t doneBlock = ^{ [self.coderQueue addOperation:doneOperation];
@strongify(self);
if (!self) {
return;
}
[self done];
};
if (@available(iOS 13, tvOS 13, macOS 10.15, watchOS 6, *)) {
// seems faster than `addOperationWithBlock`
[self.coderQueue addBarrierBlock:doneBlock];
} else {
// serial queue, this does the same effect in semantics
[self.coderQueue addOperationWithBlock:doneBlock];
}
} }
} else { } else {
[self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorBadImageData userInfo:@{NSLocalizedDescriptionKey : @"Image data is nil"}]]; [self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorBadImageData userInfo:@{NSLocalizedDescriptionKey : @"Image data is nil"}]];
......
...@@ -701,8 +701,15 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull ...@@ -701,8 +701,15 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull
#endif #endif
CGImageRef imageRef = self.CGImage; CGImageRef imageRef = self.CGImage;
if (!imageRef) {
return nil; //convert to BGRA if it isn't
if (CGImageGetBitsPerPixel(imageRef) != 32 ||
CGImageGetBitsPerComponent(imageRef) != 8 ||
!((CGImageGetBitmapInfo(imageRef) & kCGBitmapAlphaInfoMask))) {
SDGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
[self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)];
imageRef = SDGraphicsGetImageFromCurrentImageContext().CGImage;
SDGraphicsEndImageContext();
} }
vImage_Buffer effect = {}, scratch = {}; vImage_Buffer effect = {}, scratch = {};
...@@ -719,7 +726,7 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull ...@@ -719,7 +726,7 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull
}; };
vImage_Error err; vImage_Error err;
err = vImageBuffer_InitWithCGImage(&effect, &format, NULL, imageRef, kvImageNoFlags); // vImage will convert to format we requests, no need `vImageConvert` err = vImageBuffer_InitWithCGImage(&effect, &format, NULL, imageRef, kvImageNoFlags);
if (err != kvImageNoError) { if (err != kvImageNoError) {
NSLog(@"UIImage+Transform error: vImageBuffer_InitWithCGImage returned error code %zi for inputImage: %@", err, self); NSLog(@"UIImage+Transform error: vImageBuffer_InitWithCGImage returned error code %zi for inputImage: %@", err, self);
return nil; return nil;
...@@ -733,7 +740,6 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull ...@@ -733,7 +740,6 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull
input = &effect; input = &effect;
output = &scratch; output = &scratch;
// See: https://developer.apple.com/library/archive/samplecode/UIImageEffects/Introduction/Intro.html
if (hasBlur) { if (hasBlur) {
// A description of how to compute the box kernel width from the Gaussian // A description of how to compute the box kernel width from the Gaussian
// radius (aka standard deviation) appears in the SVG spec: // radius (aka standard deviation) appears in the SVG spec:
...@@ -750,17 +756,20 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull ...@@ -750,17 +756,20 @@ static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull
if (inputRadius - 2.0 < __FLT_EPSILON__) inputRadius = 2.0; if (inputRadius - 2.0 < __FLT_EPSILON__) inputRadius = 2.0;
uint32_t radius = floor(inputRadius * 3.0 * sqrt(2 * M_PI) / 4 + 0.5); uint32_t radius = floor(inputRadius * 3.0 * sqrt(2 * M_PI) / 4 + 0.5);
radius |= 1; // force radius to be odd so that the three box-blur methodology works. radius |= 1; // force radius to be odd so that the three box-blur methodology works.
int iterations;
if (blurRadius * scale < 0.5) iterations = 1;
else if (blurRadius * scale < 1.5) iterations = 2;
else iterations = 3;
NSInteger tempSize = vImageBoxConvolve_ARGB8888(input, output, NULL, 0, 0, radius, radius, NULL, kvImageGetTempBufferSize | kvImageEdgeExtend); NSInteger tempSize = vImageBoxConvolve_ARGB8888(input, output, NULL, 0, 0, radius, radius, NULL, kvImageGetTempBufferSize | kvImageEdgeExtend);
void *temp = malloc(tempSize); void *temp = malloc(tempSize);
for (int i = 0; i < iterations; i++) {
vImageBoxConvolve_ARGB8888(input, output, temp, 0, 0, radius, radius, NULL, kvImageEdgeExtend); vImageBoxConvolve_ARGB8888(input, output, temp, 0, 0, radius, radius, NULL, kvImageEdgeExtend);
vImageBoxConvolve_ARGB8888(output, input, temp, 0, 0, radius, radius, NULL, kvImageEdgeExtend);
vImageBoxConvolve_ARGB8888(input, output, temp, 0, 0, radius, radius, NULL, kvImageEdgeExtend);
free(temp);
vImage_Buffer *tmp = input; vImage_Buffer *tmp = input;
input = output; input = output;
output = tmp; output = tmp;
} }
free(temp);
}
CGImageRef effectCGImage = NULL; CGImageRef effectCGImage = NULL;
effectCGImage = vImageCreateCGImageFromBuffer(input, &format, NULL, NULL, kvImageNoAllocate, NULL); effectCGImage = vImageCreateCGImageFromBuffer(input, &format, NULL, NULL, kvImageNoAllocate, NULL);
......
...@@ -7,10 +7,11 @@ ...@@ -7,10 +7,11 @@
*/ */
#import "SDAsyncBlockOperation.h" #import "SDAsyncBlockOperation.h"
#import "SDInternalMacros.h"
@interface SDAsyncBlockOperation () @interface SDAsyncBlockOperation ()
@property (assign, nonatomic, getter = isExecuting) BOOL executing;
@property (assign, nonatomic, getter = isFinished) BOOL finished;
@property (nonatomic, copy, nonnull) SDAsyncBlock executionBlock; @property (nonatomic, copy, nonnull) SDAsyncBlock executionBlock;
@end @end
...@@ -39,17 +40,16 @@ ...@@ -39,17 +40,16 @@
self.finished = YES; self.finished = YES;
return; return;
} }
self.finished = NO; self.finished = NO;
self.executing = YES; self.executing = YES;
if (self.executionBlock) {
self.executionBlock(self);
} else {
self.executing = NO;
self.finished = YES;
} }
SDAsyncBlock executionBlock = self.executionBlock;
if (executionBlock) {
@weakify(self);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
@strongify(self);
if (!self) return;
executionBlock(self);
});
} }
} }
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
self.executing = NO; self.executing = NO;
} }
} }
} }
- (void)setFinished:(BOOL)finished { - (void)setFinished:(BOOL)finished {
[self willChangeValueForKey:@"isFinished"]; [self willChangeValueForKey:@"isFinished"];
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
[self didChangeValueForKey:@"isExecuting"]; [self didChangeValueForKey:@"isExecuting"];
} }
- (BOOL)isAsynchronous { - (BOOL)isConcurrent {
return YES; return YES;
} }
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
@property (readonly, nonatomic, weak, nullable) id target; @property (readonly, nonatomic, weak, nullable) id target;
@property (readonly, nonatomic, assign, nonnull) SEL selector; @property (readonly, nonatomic, assign, nonnull) SEL selector;
@property (readonly, nonatomic) NSTimeInterval duration; // elapsed time in seconds of previous callback. (or it's first callback, use the time between `start` and callback). Always zero when display link not running @property (readonly, nonatomic) CFTimeInterval duration;
@property (readonly, nonatomic) BOOL isRunning; @property (readonly, nonatomic) BOOL isRunning;
+ (nonnull instancetype)displayLinkWithTarget:(nonnull id)target selector:(nonnull SEL)sel; + (nonnull instancetype)displayLinkWithTarget:(nonnull id)target selector:(nonnull SEL)sel;
......
...@@ -13,31 +13,15 @@ ...@@ -13,31 +13,15 @@
#elif SD_IOS || SD_TV #elif SD_IOS || SD_TV
#import <QuartzCore/QuartzCore.h> #import <QuartzCore/QuartzCore.h>
#endif #endif
#include <mach/mach_time.h>
#if SD_MAC #if SD_MAC
static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *inNow, const CVTimeStamp *inOutputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *displayLinkContext); static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *inNow, const CVTimeStamp *inOutputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *displayLinkContext);
#endif #endif
#if SD_WATCH
static CFTimeInterval CACurrentMediaTime(void)
{
mach_timebase_info_data_t timebase;
mach_timebase_info(&timebase);
uint64_t time = mach_absolute_time();
double seconds = (double)time * (double)timebase.numer / (double)timebase.denom / 1e9;
return seconds;
}
#endif
#define kSDDisplayLinkInterval 1.0 / 60 #define kSDDisplayLinkInterval 1.0 / 60
@interface SDDisplayLink () @interface SDDisplayLink ()
@property (nonatomic, assign) NSTimeInterval previousFireTime;
@property (nonatomic, assign) NSTimeInterval nextFireTime;
#if SD_MAC #if SD_MAC
@property (nonatomic, assign) CVDisplayLinkRef displayLink; @property (nonatomic, assign) CVDisplayLinkRef displayLink;
@property (nonatomic, assign) CVTimeStamp outputTime; @property (nonatomic, assign) CVTimeStamp outputTime;
...@@ -48,6 +32,7 @@ static CFTimeInterval CACurrentMediaTime(void) ...@@ -48,6 +32,7 @@ static CFTimeInterval CACurrentMediaTime(void)
@property (nonatomic, strong) NSTimer *displayLink; @property (nonatomic, strong) NSTimer *displayLink;
@property (nonatomic, strong) NSRunLoop *runloop; @property (nonatomic, strong) NSRunLoop *runloop;
@property (nonatomic, copy) NSRunLoopMode runloopMode; @property (nonatomic, copy) NSRunLoopMode runloopMode;
@property (nonatomic, assign) NSTimeInterval currentFireDate;
#endif #endif
@end @end
...@@ -93,47 +78,33 @@ static CFTimeInterval CACurrentMediaTime(void) ...@@ -93,47 +78,33 @@ static CFTimeInterval CACurrentMediaTime(void)
return displayLink; return displayLink;
} }
- (NSTimeInterval)duration { - (CFTimeInterval)duration {
NSTimeInterval duration = 0;
#if SD_MAC #if SD_MAC
CVTimeStamp outputTime = self.outputTime; CVTimeStamp outputTime = self.outputTime;
NSTimeInterval duration = 0;
double periodPerSecond = (double)outputTime.videoTimeScale * outputTime.rateScalar; double periodPerSecond = (double)outputTime.videoTimeScale * outputTime.rateScalar;
if (periodPerSecond > 0) { if (periodPerSecond > 0) {
duration = (double)outputTime.videoRefreshPeriod / periodPerSecond; duration = (double)outputTime.videoRefreshPeriod / periodPerSecond;
} }
#else #elif SD_IOS || SD_TV
// iOS 10+/watchOS use `nextTime` #pragma clang diagnostic push
if (@available(iOS 10.0, tvOS 10.0, watchOS 2.0, *)) { #pragma clang diagnostic ignored "-Wdeprecated-declarations"
duration = self.nextFireTime - CACurrentMediaTime(); NSTimeInterval duration = 0;
} else { if (@available(iOS 10.0, tvOS 10.0, *)) {
// iOS 9 use `previousTime` duration = self.displayLink.targetTimestamp - CACurrentMediaTime();
duration = CACurrentMediaTime() - self.previousFireTime;
}
#endif
// When system sleep, the targetTimestamp will mass up, fallback refresh rate
if (duration < 0) {
#if SD_MAC
// Supports Pro display 120Hz
CGDirectDisplayID display = CVDisplayLinkGetCurrentCGDisplay(_displayLink);
CGDisplayModeRef mode = CGDisplayCopyDisplayMode(display);
if (mode) {
double refreshRate = CGDisplayModeGetRefreshRate(mode);
if (refreshRate > 0) {
duration = 1.0 / refreshRate;
} else {
duration = kSDDisplayLinkInterval;
}
CGDisplayModeRelease(mode);
} else { } else {
duration = kSDDisplayLinkInterval; duration = self.displayLink.duration * self.displayLink.frameInterval;
} }
#elif SD_IOS || SD_TV #pragma clang diagnostic pop
// Fallback
duration = self.displayLink.duration;
#else #else
// Watch always 60Hz NSTimeInterval duration = 0;
duration = kSDDisplayLinkInterval; if (self.displayLink.isValid && self.currentFireDate != 0) {
NSTimeInterval nextFireDate = CFRunLoopTimerGetNextFireDate((__bridge CFRunLoopTimerRef)self.displayLink);
duration = nextFireDate - self.currentFireDate;
}
#endif #endif
if (duration <= 0) {
duration = kSDDisplayLinkInterval;
} }
return duration; return duration;
} }
...@@ -218,25 +189,24 @@ static CFTimeInterval CACurrentMediaTime(void) ...@@ -218,25 +189,24 @@ static CFTimeInterval CACurrentMediaTime(void)
#else #else
[self.displayLink invalidate]; [self.displayLink invalidate];
#endif #endif
self.previousFireTime = 0;
self.nextFireTime = 0;
} }
- (void)displayLinkDidRefresh:(id)displayLink { - (void)displayLinkDidRefresh:(id)displayLink {
#if SD_IOS || SD_TV #if SD_MAC
if (@available(iOS 10.0, tvOS 10.0, *)) { // CVDisplayLink does not use runloop, but we can provide similar behavior for modes
self.nextFireTime = self.displayLink.targetTimestamp; // May use `default` runloop to avoid extra callback when in `eventTracking` (mouse drag, scroll) or `modalPanel` (modal panel)
} else { NSString *runloopMode = self.runloopMode;
self.previousFireTime = self.displayLink.timestamp; if (![runloopMode isEqualToString:NSRunLoopCommonModes] && ![runloopMode isEqualToString:NSRunLoop.mainRunLoop.currentMode]) {
return;
} }
#endif #endif
#if SD_WATCH
self.nextFireTime = CFRunLoopTimerGetNextFireDate((__bridge CFRunLoopTimerRef)self.displayLink);
#endif
#pragma clang diagnostic push #pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks" #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[_target performSelector:_selector withObject:self]; [_target performSelector:_selector withObject:self];
#pragma clang diagnostic pop #pragma clang diagnostic pop
#if SD_WATCH
self.currentFireDate = CFRunLoopTimerGetNextFireDate((__bridge CFRunLoopTimerRef)self.displayLink);
#endif
} }
@end @end
...@@ -245,16 +215,11 @@ static CFTimeInterval CACurrentMediaTime(void) ...@@ -245,16 +215,11 @@ static CFTimeInterval CACurrentMediaTime(void)
static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *inNow, const CVTimeStamp *inOutputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *displayLinkContext) { static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *inNow, const CVTimeStamp *inOutputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *displayLinkContext) {
// CVDisplayLink callback is not on main queue // CVDisplayLink callback is not on main queue
SDDisplayLink *object = (__bridge SDDisplayLink *)displayLinkContext; SDDisplayLink *object = (__bridge SDDisplayLink *)displayLinkContext;
// CVDisplayLink does not use runloop, but we can provide similar behavior for modes if (inOutputTime) {
// May use `default` runloop to avoid extra callback when in `eventTracking` (mouse drag, scroll) or `modalPanel` (modal panel) object.outputTime = *inOutputTime;
NSString *runloopMode = object.runloopMode;
if (![runloopMode isEqualToString:NSRunLoopCommonModes] && ![runloopMode isEqualToString:NSRunLoop.mainRunLoop.currentMode]) {
return kCVReturnSuccess;
} }
CVTimeStamp outputTime = inOutputTime ? *inOutputTime : *inNow;
__weak SDDisplayLink *weakObject = object; __weak SDDisplayLink *weakObject = object;
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
weakObject.outputTime = outputTime;
[weakObject displayLinkDidRefresh:(__bridge id)(displayLink)]; [weakObject displayLinkDidRefresh:(__bridge id)(displayLink)];
}); });
return kCVReturnSuccess; return kCVReturnSuccess;
......
...@@ -357,31 +357,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ...@@ -357,31 +357,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. SOFTWARE.
## YModemLib
MIT License
Copyright (c) 2020 RND
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.
## ZFPlayer ## ZFPlayer
Copyright (c) 2018 renzifeng <zifeng1300@gmail.com> Copyright (c) 2018 renzifeng <zifeng1300@gmail.com>
......
...@@ -466,37 +466,6 @@ SOFTWARE. ...@@ -466,37 +466,6 @@ SOFTWARE.
</dict> </dict>
<dict> <dict>
<key>FooterText</key> <key>FooterText</key>
<string>MIT License
Copyright (c) 2020 RND
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>License</key>
<string>MIT</string>
<key>Title</key>
<string>YModemLib</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright (c) 2018 renzifeng &lt;zifeng1300@gmail.com&gt; <string>Copyright (c) 2018 renzifeng &lt;zifeng1300@gmail.com&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
......
...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework ...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework
${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework ${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework
${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework
${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework ${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework
${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework
\ No newline at end of file
...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework ...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YModemLib.framework
\ No newline at end of file
...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework ...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework
${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework ${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework
${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework
${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework ${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework
${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework
\ No newline at end of file
...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework ...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YModemLib.framework
\ No newline at end of file
...@@ -41,7 +41,7 @@ install_framework() ...@@ -41,7 +41,7 @@ install_framework()
if [ -L "${source}" ]; then if [ -L "${source}" ]; then
echo "Symlinked..." echo "Symlinked..."
source="$(readlink -f "${source}")" source="$(readlink "${source}")"
fi fi
if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then
...@@ -191,7 +191,6 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then ...@@ -191,7 +191,6 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework" install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework"
install_framework "${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework"
fi fi
if [[ "$CONFIGURATION" == "Release" ]]; then if [[ "$CONFIGURATION" == "Release" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework" install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework"
...@@ -209,7 +208,6 @@ if [[ "$CONFIGURATION" == "Release" ]]; then ...@@ -209,7 +208,6 @@ if [[ "$CONFIGURATION" == "Release" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework" install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework"
install_framework "${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework"
fi fi
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
wait wait
......
...@@ -357,31 +357,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ...@@ -357,31 +357,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. SOFTWARE.
## YModemLib
MIT License
Copyright (c) 2020 RND
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.
## ZFPlayer ## ZFPlayer
Copyright (c) 2018 renzifeng <zifeng1300@gmail.com> Copyright (c) 2018 renzifeng <zifeng1300@gmail.com>
......
...@@ -466,37 +466,6 @@ SOFTWARE. ...@@ -466,37 +466,6 @@ SOFTWARE.
</dict> </dict>
<dict> <dict>
<key>FooterText</key> <key>FooterText</key>
<string>MIT License
Copyright (c) 2020 RND
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>License</key>
<string>MIT</string>
<key>Title</key>
<string>YModemLib</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright (c) 2018 renzifeng &lt;zifeng1300@gmail.com&gt; <string>Copyright (c) 2018 renzifeng &lt;zifeng1300@gmail.com&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
......
...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework ...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework
${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework ${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework
${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework
${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework ${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework
${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework
\ No newline at end of file
...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework ...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YModemLib.framework
\ No newline at end of file
...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework ...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework
${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework ${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework
${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework
${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework ${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework
${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework
\ No newline at end of file
...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework ...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YModemLib.framework
\ No newline at end of file
...@@ -41,7 +41,7 @@ install_framework() ...@@ -41,7 +41,7 @@ install_framework()
if [ -L "${source}" ]; then if [ -L "${source}" ]; then
echo "Symlinked..." echo "Symlinked..."
source="$(readlink -f "${source}")" source="$(readlink "${source}")"
fi fi
if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then
...@@ -191,7 +191,6 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then ...@@ -191,7 +191,6 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework" install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework"
install_framework "${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework"
fi fi
if [[ "$CONFIGURATION" == "Release" ]]; then if [[ "$CONFIGURATION" == "Release" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework" install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework"
...@@ -209,7 +208,6 @@ if [[ "$CONFIGURATION" == "Release" ]]; then ...@@ -209,7 +208,6 @@ if [[ "$CONFIGURATION" == "Release" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework" install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework"
install_framework "${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework"
fi fi
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
wait wait
......
...@@ -357,31 +357,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ...@@ -357,31 +357,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. SOFTWARE.
## YModemLib
MIT License
Copyright (c) 2020 RND
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.
## ZFPlayer ## ZFPlayer
Copyright (c) 2018 renzifeng <zifeng1300@gmail.com> Copyright (c) 2018 renzifeng <zifeng1300@gmail.com>
......
...@@ -466,37 +466,6 @@ SOFTWARE. ...@@ -466,37 +466,6 @@ SOFTWARE.
</dict> </dict>
<dict> <dict>
<key>FooterText</key> <key>FooterText</key>
<string>MIT License
Copyright (c) 2020 RND
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>License</key>
<string>MIT</string>
<key>Title</key>
<string>YModemLib</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright (c) 2018 renzifeng &lt;zifeng1300@gmail.com&gt; <string>Copyright (c) 2018 renzifeng &lt;zifeng1300@gmail.com&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
......
...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework ...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework
${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework ${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework
${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework
${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework ${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework
${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework
\ No newline at end of file
...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework ...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YModemLib.framework
\ No newline at end of file
...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework ...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework
${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework ${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework
${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework
${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework ${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework
${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework
\ No newline at end of file
...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework ...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YModemLib.framework
\ No newline at end of file
...@@ -41,7 +41,7 @@ install_framework() ...@@ -41,7 +41,7 @@ install_framework()
if [ -L "${source}" ]; then if [ -L "${source}" ]; then
echo "Symlinked..." echo "Symlinked..."
source="$(readlink -f "${source}")" source="$(readlink "${source}")"
fi fi
if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then
...@@ -191,7 +191,6 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then ...@@ -191,7 +191,6 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework" install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework"
install_framework "${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework"
fi fi
if [[ "$CONFIGURATION" == "Release" ]]; then if [[ "$CONFIGURATION" == "Release" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework" install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework"
...@@ -209,7 +208,6 @@ if [[ "$CONFIGURATION" == "Release" ]]; then ...@@ -209,7 +208,6 @@ if [[ "$CONFIGURATION" == "Release" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework" install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework"
install_framework "${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework"
fi fi
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
wait wait
......
...@@ -357,31 +357,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ...@@ -357,31 +357,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. SOFTWARE.
## YModemLib
MIT License
Copyright (c) 2020 RND
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.
## ZFPlayer ## ZFPlayer
Copyright (c) 2018 renzifeng <zifeng1300@gmail.com> Copyright (c) 2018 renzifeng <zifeng1300@gmail.com>
......
...@@ -466,37 +466,6 @@ SOFTWARE. ...@@ -466,37 +466,6 @@ SOFTWARE.
</dict> </dict>
<dict> <dict>
<key>FooterText</key> <key>FooterText</key>
<string>MIT License
Copyright (c) 2020 RND
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>License</key>
<string>MIT</string>
<key>Title</key>
<string>YModemLib</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright (c) 2018 renzifeng &lt;zifeng1300@gmail.com&gt; <string>Copyright (c) 2018 renzifeng &lt;zifeng1300@gmail.com&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
......
...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework ...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework
${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework ${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework
${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework
${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework ${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework
${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework
\ No newline at end of file
...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework ...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YModemLib.framework
\ No newline at end of file
...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework ...@@ -14,4 +14,3 @@ ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework
${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework ${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework
${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework
${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework ${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework
${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework
\ No newline at end of file
...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework ...@@ -13,4 +13,3 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDCycleScrollView.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YModemLib.framework
\ No newline at end of file
...@@ -41,7 +41,7 @@ install_framework() ...@@ -41,7 +41,7 @@ install_framework()
if [ -L "${source}" ]; then if [ -L "${source}" ]; then
echo "Symlinked..." echo "Symlinked..."
source="$(readlink -f "${source}")" source="$(readlink "${source}")"
fi fi
if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then
...@@ -191,7 +191,6 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then ...@@ -191,7 +191,6 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework" install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework"
install_framework "${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework"
fi fi
if [[ "$CONFIGURATION" == "Release" ]]; then if [[ "$CONFIGURATION" == "Release" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework" install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework"
...@@ -209,7 +208,6 @@ if [[ "$CONFIGURATION" == "Release" ]]; then ...@@ -209,7 +208,6 @@ if [[ "$CONFIGURATION" == "Release" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDCycleScrollView/SDCycleScrollView.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework"
install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework" install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework"
install_framework "${BUILT_PRODUCTS_DIR}/YModemLib/YModemLib.framework"
fi fi
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
wait wait
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>5.15.5</string> <string>5.15.0</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
......
<?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>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0.2</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>${CURRENT_PROJECT_VERSION}</string>
<key>NSPrincipalClass</key>
<string></string>
</dict>
</plist>
#import <Foundation/Foundation.h>
@interface PodsDummy_YModemLib : NSObject
@end
@implementation PodsDummy_YModemLib
@end
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#else
#ifndef FOUNDATION_EXPORT
#if defined(__cplusplus)
#define FOUNDATION_EXPORT extern "C"
#else
#define FOUNDATION_EXPORT extern
#endif
#endif
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#else
#ifndef FOUNDATION_EXPORT
#if defined(__cplusplus)
#define FOUNDATION_EXPORT extern "C"
#else
#define FOUNDATION_EXPORT extern
#endif
#endif
#endif
#import "YModem.h"
#import "YModemUtil.h"
FOUNDATION_EXPORT double YModemLibVersionNumber;
FOUNDATION_EXPORT const unsigned char YModemLibVersionString[];
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YModemLib
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "UIKit"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/YModemLib
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
framework module YModemLib {
umbrella header "YModemLib-umbrella.h"
export *
module * { export * }
}
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