├── .gitignore ├── Podfile ├── smallInke ├── LiveListViewController.h ├── LiveCell.h ├── AppDelegate.h ├── UIImage+Add.h ├── LiveRoomViewController.h ├── main.m ├── LiveListStore.h ├── Creator.h ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── Live.h ├── LiveListStore.m ├── Info.plist ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── AppDelegate.m ├── LiveRoomViewController.m ├── LiveCell.m ├── Creator.m ├── LiveListViewController.m ├── Live.m └── UIImage+Add.m ├── README.md └── smallInke.xcodeproj ├── xcuserdata └── xiaoxueyuan.xcuserdatad │ └── xcschemes │ ├── xcschememanagement.plist │ └── smallInke.xcscheme └── project.pbxproj /.gitignore: -------------------------------------------------------------------------------- 1 | /Pods 2 | *.xcworkspace 3 | Podfile.lock 4 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | pod 'AFNetworking', '~> 3.0.4' 2 | pod 'SDWebImage' 3 | pod 'MJRefresh' 4 | pod 'PLPlayerKit', '~> 2.2.4' 5 | -------------------------------------------------------------------------------- /smallInke/LiveListViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // smallInke 4 | // 5 | // Created by Xiaoxueyuan on 12/9/16. 6 | // Copyright © 2016年 Xiaoxueyuan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface LiveListViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /smallInke/LiveCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // LiveCell.h 3 | // smallInke 4 | // 5 | // Created by Xiaoxueyuan on 12/9/16. 6 | // Copyright © 2016年 Xiaoxueyuan. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "Live.h" 11 | 12 | @interface LiveCell : UITableViewCell 13 | 14 | @property (nonatomic, strong) Live *live; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # smallInke 2 | 小映客 3 | 用映客的数据,做了简单的看直播的demo,单从看直播来看,加载速度比映客本身还要快。 4 | 有空继续完善 5 | 么么哒~ 6 | 我的Pod是0.38 如果是1.0以上的版本需要把Podfile改成如下: 7 | >target 'smallInke' do 8 | > pod 'AFNetworking', '~> 3.0.4' 9 | > pod 'SDWebImage' 10 | > pod 'MJRefresh' 11 | > pod 'PLPlayerKit', '~> 2.2.4' 12 | >end 13 | 14 | 15 | 有疑问新浪微博@叉叉歪大王 16 | -------------------------------------------------------------------------------- /smallInke/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // smallInke 4 | // 5 | // Created by Xiaoxueyuan on 12/9/16. 6 | // Copyright © 2016年 Xiaoxueyuan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /smallInke/UIImage+Add.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+Add.h 3 | // smallInke 4 | // 5 | // Created by Xiaoxueyuan on 12/9/16. 6 | // Copyright © 2016年 Xiaoxueyuan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIImage (Add) 12 | 13 | - (UIImage *)imageByRoundCornerRadius:(CGFloat)radius; 14 | 15 | - (UIImage *)imageByResizeToSize:(CGSize)size; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /smallInke/LiveRoomViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // LiveRoomViewController.h 3 | // smallInke 4 | // 5 | // Created by Xiaoxueyuan on 12/9/16. 6 | // Copyright © 2016年 Xiaoxueyuan. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "Live.h" 11 | 12 | @interface LiveRoomViewController : UIViewController 13 | 14 | @property (nonatomic, strong) Live *liveModel; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /smallInke/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // smallInke 4 | // 5 | // Created by Xiaoxueyuan on 12/9/16. 6 | // Copyright © 2016年 Xiaoxueyuan. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /smallInke/LiveListStore.h: -------------------------------------------------------------------------------- 1 | // 2 | // LiveListStore.h 3 | // smallInke 4 | // 5 | // Created by Xiaoxueyuan on 12/9/16. 6 | // Copyright © 2016年 Xiaoxueyuan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface LiveListStore : NSObject 12 | 13 | @property (nonatomic, copy) NSArray *liveList; 14 | 15 | @property (nonatomic, copy) void(^selectedRowAtIndexPath)(NSIndexPath *indexPath); 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /smallInke/Creator.h: -------------------------------------------------------------------------------- 1 | // 2 | // Creator.h 3 | //on 12/9/2016 4 | // Copyright © 2016. All rights reserved. 5 | // 6 | 7 | // Model file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport 8 | 9 | #import 10 | 11 | @interface Creator : NSObject 12 | 13 | @property (nonatomic, assign) NSInteger idField; 14 | @property (nonatomic, assign) NSInteger level; 15 | @property (nonatomic, strong) NSString * nick; 16 | @property (nonatomic, strong) NSString * portrait; 17 | 18 | -(instancetype)initWithDictionary:(NSDictionary *)dictionary; 19 | 20 | -(NSDictionary *)toDictionary; 21 | 22 | @end -------------------------------------------------------------------------------- /smallInke.xcodeproj/xcuserdata/xiaoxueyuan.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | smallInke.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | A9C81EAA1D86CAC60061A582 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /smallInke/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /smallInke/Live.h: -------------------------------------------------------------------------------- 1 | // 2 | // Live.h 3 | //on 12/9/2016 4 | // Copyright © 2016. All rights reserved. 5 | // 6 | 7 | // Model file Generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport 8 | 9 | #import 10 | #import "Creator.h" 11 | 12 | @interface Live : NSObject 13 | 14 | @property (nonatomic, strong) NSString * city; 15 | @property (nonatomic, strong) Creator * creator; 16 | @property (nonatomic, assign) NSInteger group; 17 | @property (nonatomic, strong) NSString * idField; 18 | @property (nonatomic, assign) NSInteger link; 19 | @property (nonatomic, assign) NSInteger multi; 20 | @property (nonatomic, strong) NSString * name; 21 | @property (nonatomic, assign) NSInteger onlineUsers; 22 | @property (nonatomic, assign) NSInteger optimal; 23 | @property (nonatomic, strong) NSString * shareAddr; 24 | @property (nonatomic, assign) NSInteger slot; 25 | @property (nonatomic, strong) NSString * streamAddr; 26 | @property (nonatomic, assign) NSInteger version; 27 | 28 | -(instancetype)initWithDictionary:(NSDictionary *)dictionary; 29 | 30 | -(NSDictionary *)toDictionary; 31 | @end -------------------------------------------------------------------------------- /smallInke/LiveListStore.m: -------------------------------------------------------------------------------- 1 | // 2 | // LiveListStore.m 3 | // smallInke 4 | // 5 | // Created by Xiaoxueyuan on 12/9/16. 6 | // Copyright © 2016年 Xiaoxueyuan. All rights reserved. 7 | // 8 | 9 | #import "LiveListStore.h" 10 | #import "LiveCell.h" 11 | #import "Live.h" 12 | 13 | @implementation LiveListStore 14 | 15 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 16 | return 1; 17 | } 18 | 19 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ 20 | return self.liveList.count; 21 | } 22 | 23 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 24 | LiveCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 25 | 26 | cell.live = self.liveList[indexPath.section]; 27 | 28 | return cell; 29 | } 30 | 31 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 32 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 33 | if (self.selectedRowAtIndexPath) { 34 | self.selectedRowAtIndexPath(indexPath); 35 | } 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /smallInke/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSAllowsArbitraryLoads 28 | 29 | 30 | UILaunchStoryboardName 31 | LaunchScreen 32 | UIMainStoryboardFile 33 | Main 34 | UIRequiredDeviceCapabilities 35 | 36 | armv7 37 | 38 | UIStatusBarStyle 39 | UIStatusBarStyleLightContent 40 | UISupportedInterfaceOrientations 41 | 42 | UIInterfaceOrientationPortrait 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | UIViewControllerBasedStatusBarAppearance 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /smallInke/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /smallInke/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // smallInke 4 | // 5 | // Created by Xiaoxueyuan on 12/9/16. 6 | // Copyright © 2016年 Xiaoxueyuan. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "PLPlayerEnv.h" 11 | 12 | @interface AppDelegate () 13 | 14 | @end 15 | 16 | @implementation AppDelegate 17 | 18 | 19 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 20 | // Override point for customization after application launch. 21 | [PLPlayerEnv initEnv]; 22 | return YES; 23 | } 24 | 25 | - (void)applicationWillResignActive:(UIApplication *)application { 26 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 27 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 28 | } 29 | 30 | - (void)applicationDidEnterBackground:(UIApplication *)application { 31 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 32 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 33 | } 34 | 35 | - (void)applicationWillEnterForeground:(UIApplication *)application { 36 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 37 | } 38 | 39 | - (void)applicationDidBecomeActive:(UIApplication *)application { 40 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 41 | } 42 | 43 | - (void)applicationWillTerminate:(UIApplication *)application { 44 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 45 | } 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /smallInke/LiveRoomViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // LiveRoomViewController.m 3 | // smallInke 4 | // 5 | // Created by Xiaoxueyuan on 12/9/16. 6 | // Copyright © 2016年 Xiaoxueyuan. All rights reserved. 7 | // 8 | 9 | #import "LiveRoomViewController.h" 10 | #import "PLPlayerKit.h" 11 | 12 | @interface LiveRoomViewController () 13 | 14 | @property (nonatomic, strong) PLPlayer *player; 15 | 16 | @end 17 | 18 | @implementation LiveRoomViewController 19 | 20 | - (void)viewDidLoad { 21 | [super viewDidLoad]; 22 | 23 | 24 | 25 | PLPlayerOption *option = [PLPlayerOption defaultOption]; 26 | [option setOptionValue:@10 forKey:PLPlayerOptionKeyTimeoutIntervalForMediaPackets]; 27 | [option setOptionValue:@(NO) forKey:PLPlayerOptionKeyVideoToolbox]; 28 | [option setOptionValue:@(800) forKey:PLPlayerOptionKeyMaxL1BufferDuration]; 29 | [option setOptionValue:@(800) forKey:PLPlayerOptionKeyMaxL2BufferDuration]; 30 | 31 | self.player = [[PLPlayer alloc] initWithURL:[NSURL URLWithString:self.liveModel.streamAddr] option:option]; 32 | self.player.delegateQueue = dispatch_get_main_queue(); 33 | self.player.backgroundPlayEnable = YES; 34 | [self.view insertSubview:self.player.playerView atIndex:0]; 35 | self.player.playerView.frame = [UIScreen mainScreen].bounds; 36 | [self.player play]; 37 | 38 | // Do any additional setup after loading the view. 39 | } 40 | 41 | - (void)viewWillAppear:(BOOL)animated{ 42 | [super viewWillAppear:animated]; 43 | [self.navigationController.navigationBar setHidden:YES]; 44 | } 45 | 46 | - (void)viewWillDisappear:(BOOL)animated{ 47 | [super viewWillDisappear:animated]; 48 | [self.navigationController.navigationBar setHidden:NO]; 49 | [self.player stop]; 50 | } 51 | 52 | 53 | 54 | - (IBAction)close:(id)sender { 55 | [self.navigationController popViewControllerAnimated:YES]; 56 | } 57 | 58 | /* 59 | #pragma mark - Navigation 60 | 61 | // In a storyboard-based application, you will often want to do a little preparation before navigation 62 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 63 | // Get the new view controller using [segue destinationViewController]. 64 | // Pass the selected object to the new view controller. 65 | } 66 | */ 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /smallInke/LiveCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // LiveCell.m 3 | // smallInke 4 | // 5 | // Created by Xiaoxueyuan on 12/9/16. 6 | // Copyright © 2016年 Xiaoxueyuan. All rights reserved. 7 | // 8 | 9 | #import "LiveCell.h" 10 | #import "UIImageView+WebCache.h" 11 | #import "UIImage+Add.h" 12 | 13 | @interface LiveCell() 14 | @property (weak, nonatomic) IBOutlet UIImageView *avatorImageView; 15 | @property (weak, nonatomic) IBOutlet UILabel *nickName; 16 | @property (weak, nonatomic) IBOutlet UILabel *locationLabel; 17 | @property (weak, nonatomic) IBOutlet UILabel *onlineCountLabel; 18 | @property (weak, nonatomic) IBOutlet UIImageView *liveCoverImageView; 19 | 20 | @end 21 | 22 | @implementation LiveCell 23 | 24 | - (void)awakeFromNib { 25 | [super awakeFromNib]; 26 | // Initialization code 27 | } 28 | 29 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated { 30 | [super setSelected:selected animated:animated]; 31 | 32 | // Configure the view for the selected state 33 | } 34 | 35 | - (void)setLive:(Live *)live{ 36 | _live = live; 37 | NSString *loc = live.city; 38 | if ([loc isEqualToString:@""]) { 39 | loc = @"火星"; 40 | } 41 | //SDWebImageAvoidAutoSetImage 42 | _locationLabel.text = [NSString stringWithFormat:@"%@>",loc]; 43 | _nickName.text = live.creator.nick; 44 | _onlineCountLabel.text = [NSString stringWithFormat:@"%ld",(long)live.onlineUsers]; 45 | NSString *imgUrl = [NSString stringWithFormat:@"http://img.meelive.cn/%@",live.creator.portrait]; 46 | __weak typeof(self) weakSelf = self; 47 | CGFloat screenScale = [UIScreen mainScreen].nativeScale; 48 | [_avatorImageView sd_setImageWithURL:[NSURL URLWithString:imgUrl] placeholderImage:nil options:SDWebImageAvoidAutoSetImage completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { 49 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 50 | UIImage *newImage = [image imageByResizeToSize:CGSizeMake(42 * screenScale, 42 * screenScale)]; 51 | newImage = [newImage imageByRoundCornerRadius:21 * screenScale]; 52 | dispatch_async(dispatch_get_main_queue(), ^{ 53 | weakSelf.avatorImageView.image = newImage; 54 | }); 55 | }); 56 | }]; 57 | [_liveCoverImageView sd_setImageWithURL:[NSURL URLWithString:imgUrl]]; 58 | } 59 | 60 | @end 61 | -------------------------------------------------------------------------------- /smallInke/Creator.m: -------------------------------------------------------------------------------- 1 | // 2 | // Creator.m 3 | //on 12/9/2016 4 | // Copyright © 2016. All rights reserved. 5 | // Model file generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport 6 | 7 | 8 | 9 | #import "Creator.h" 10 | 11 | NSString *const kCreatorIdField = @"id"; 12 | NSString *const kCreatorLevel = @"level"; 13 | NSString *const kCreatorNick = @"nick"; 14 | NSString *const kCreatorPortrait = @"portrait"; 15 | 16 | @interface Creator () 17 | @end 18 | @implementation Creator 19 | 20 | 21 | 22 | 23 | /** 24 | * Instantiate the instance using the passed dictionary values to set the properties values 25 | */ 26 | 27 | -(instancetype)initWithDictionary:(NSDictionary *)dictionary 28 | { 29 | self = [super init]; 30 | if(![dictionary[kCreatorIdField] isKindOfClass:[NSNull class]]){ 31 | self.idField = [dictionary[kCreatorIdField] integerValue]; 32 | } 33 | 34 | if(![dictionary[kCreatorLevel] isKindOfClass:[NSNull class]]){ 35 | self.level = [dictionary[kCreatorLevel] integerValue]; 36 | } 37 | 38 | if(![dictionary[kCreatorNick] isKindOfClass:[NSNull class]]){ 39 | self.nick = dictionary[kCreatorNick]; 40 | } 41 | if(![dictionary[kCreatorPortrait] isKindOfClass:[NSNull class]]){ 42 | self.portrait = dictionary[kCreatorPortrait]; 43 | } 44 | return self; 45 | } 46 | 47 | 48 | /** 49 | * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property 50 | */ 51 | -(NSDictionary *)toDictionary 52 | { 53 | NSMutableDictionary * dictionary = [NSMutableDictionary dictionary]; 54 | dictionary[kCreatorIdField] = @(self.idField); 55 | dictionary[kCreatorLevel] = @(self.level); 56 | if(self.nick != nil){ 57 | dictionary[kCreatorNick] = self.nick; 58 | } 59 | if(self.portrait != nil){ 60 | dictionary[kCreatorPortrait] = self.portrait; 61 | } 62 | return dictionary; 63 | 64 | } 65 | 66 | /** 67 | * Implementation of NSCoding encoding method 68 | */ 69 | /** 70 | * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property 71 | */ 72 | - (void)encodeWithCoder:(NSCoder *)aCoder 73 | { 74 | [aCoder encodeObject:@(self.idField) forKey:kCreatorIdField]; [aCoder encodeObject:@(self.level) forKey:kCreatorLevel]; if(self.nick != nil){ 75 | [aCoder encodeObject:self.nick forKey:kCreatorNick]; 76 | } 77 | if(self.portrait != nil){ 78 | [aCoder encodeObject:self.portrait forKey:kCreatorPortrait]; 79 | } 80 | 81 | } 82 | 83 | /** 84 | * Implementation of NSCoding initWithCoder: method 85 | */ 86 | - (instancetype)initWithCoder:(NSCoder *)aDecoder 87 | { 88 | self = [super init]; 89 | self.idField = [[aDecoder decodeObjectForKey:kCreatorIdField] integerValue]; 90 | self.level = [[aDecoder decodeObjectForKey:kCreatorLevel] integerValue]; 91 | self.nick = [aDecoder decodeObjectForKey:kCreatorNick]; 92 | self.portrait = [aDecoder decodeObjectForKey:kCreatorPortrait]; 93 | return self; 94 | 95 | } 96 | 97 | /** 98 | * Implementation of NSCopying copyWithZone: method 99 | */ 100 | - (instancetype)copyWithZone:(NSZone *)zone 101 | { 102 | Creator *copy = [Creator new]; 103 | 104 | copy.idField = self.idField; 105 | copy.level = self.level; 106 | copy.nick = [self.nick copyWithZone:zone]; 107 | copy.portrait = [self.portrait copyWithZone:zone]; 108 | 109 | return copy; 110 | } 111 | @end -------------------------------------------------------------------------------- /smallInke.xcodeproj/xcuserdata/xiaoxueyuan.xcuserdatad/xcschemes/smallInke.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /smallInke/LiveListViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // smallInke 4 | // 5 | // Created by Xiaoxueyuan on 12/9/16. 6 | // Copyright © 2016年 Xiaoxueyuan. All rights reserved. 7 | // 8 | 9 | #import "LiveListViewController.h" 10 | #import "AFNetworking.h" 11 | #import "Live.h" 12 | #import "LiveListStore.h" 13 | #import "LiveRoomViewController.h" 14 | #import "MJRefresh.h" 15 | 16 | #define UIColorFromRGB(rgbValue) [UIColor \ 17 | colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \ 18 | green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \ 19 | blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] 20 | @interface LiveListViewController () 21 | 22 | 23 | @property (strong, nonatomic) IBOutlet LiveListStore *dataStore; 24 | 25 | @property (weak, nonatomic) IBOutlet UITableView *tableView; 26 | 27 | @end 28 | 29 | @implementation LiveListViewController 30 | 31 | - (void)viewDidLoad { 32 | [super viewDidLoad]; 33 | [self.navigationController.navigationBar setTitleTextAttributes: 34 | @{NSForegroundColorAttributeName:[UIColor whiteColor]}]; 35 | self.title = @"小映客"; 36 | self.navigationController.interactivePopGestureRecognizer.enabled = NO; 37 | [self.navigationController.navigationBar setBarTintColor:UIColorFromRGB(0x00d8c9)]; 38 | CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width; 39 | self.tableView.rowHeight = 10 + 42 + 10 + screenWidth; 40 | self.tableView.tableHeaderView = ({ 41 | UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, CGFLOAT_MIN)]; 42 | view; 43 | }); 44 | self.tableView.tableFooterView = ({ 45 | UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, CGFLOAT_MIN)]; 46 | view; 47 | }); 48 | MJRefreshNormalHeader *header = [[MJRefreshNormalHeader alloc] init]; 49 | header.refreshingTarget = self; 50 | header.refreshingAction = @selector(getLiveList); 51 | self.tableView.mj_header = header; 52 | [header beginRefreshing]; 53 | 54 | __weak typeof(self) weakSelf = self; 55 | [self.dataStore setSelectedRowAtIndexPath:^(NSIndexPath *indexPath) { 56 | [weakSelf watchLive:indexPath.section]; 57 | }]; 58 | // Do any additional setup after loading the view, typically from a nib. 59 | } 60 | 61 | - (void)getLiveList{ 62 | 63 | __weak typeof(self) weakSelf = self; 64 | 65 | AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 66 | manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; 67 | [manager GET:@"http://116.211.167.106/api/live/aggregation?uid=133825214&interest=1&count=20" 68 | parameters:nil 69 | progress:nil 70 | success:\ 71 | ^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 72 | NSArray *lives = responseObject[@"lives"]; 73 | NSMutableArray *liveArray = @[].mutableCopy; 74 | for (NSDictionary *liveDic in lives) { 75 | Live *live = [[Live alloc] initWithDictionary:liveDic]; 76 | [liveArray addObject:live]; 77 | } 78 | [weakSelf finishLoadList:liveArray]; 79 | } 80 | failure:\ 81 | ^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 82 | NSLog(@"%@",error.localizedDescription); 83 | }]; 84 | } 85 | 86 | - (void)finishLoadList:(NSArray *)array{ 87 | [self.tableView.mj_header endRefreshing]; 88 | self.dataStore.liveList = array; 89 | [self.tableView reloadData]; 90 | } 91 | 92 | - (UIStatusBarStyle)preferredStatusBarStyle{ 93 | return UIStatusBarStyleLightContent; 94 | } 95 | 96 | - (void)watchLive:(NSInteger)index{ 97 | Live *live = self.dataStore.liveList[index]; 98 | [self performSegueWithIdentifier:@"watchLive" sender:live]; 99 | } 100 | 101 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 102 | if ([segue.identifier isEqualToString:@"watchLive"]) { 103 | LiveRoomViewController *roomVC = segue.destinationViewController; 104 | roomVC.liveModel = sender; 105 | } 106 | } 107 | 108 | @end 109 | -------------------------------------------------------------------------------- /smallInke/Live.m: -------------------------------------------------------------------------------- 1 | // 2 | // Live.m 3 | //on 12/9/2016 4 | // Copyright © 2016. All rights reserved. 5 | // Model file generated using JSONExport: https://github.com/Ahmed-Ali/JSONExport 6 | 7 | 8 | 9 | #import "Live.h" 10 | 11 | NSString *const kLiveCity = @"city"; 12 | NSString *const kLiveCreator = @"creator"; 13 | NSString *const kLiveGroup = @"group"; 14 | NSString *const kLiveIdField = @"id"; 15 | NSString *const kLiveLink = @"link"; 16 | NSString *const kLiveMulti = @"multi"; 17 | NSString *const kLiveName = @"name"; 18 | NSString *const kLiveOnlineUsers = @"online_users"; 19 | NSString *const kLiveOptimal = @"optimal"; 20 | NSString *const kLiveShareAddr = @"share_addr"; 21 | NSString *const kLiveSlot = @"slot"; 22 | NSString *const kLiveStreamAddr = @"stream_addr"; 23 | NSString *const kLiveVersion = @"version"; 24 | 25 | @interface Live () 26 | @end 27 | @implementation Live 28 | 29 | 30 | 31 | 32 | /** 33 | * Instantiate the instance using the passed dictionary values to set the properties values 34 | */ 35 | 36 | -(instancetype)initWithDictionary:(NSDictionary *)dictionary 37 | { 38 | self = [super init]; 39 | if(![dictionary[kLiveCity] isKindOfClass:[NSNull class]]){ 40 | self.city = dictionary[kLiveCity]; 41 | } 42 | if(![dictionary[kLiveCreator] isKindOfClass:[NSNull class]]){ 43 | self.creator = [[Creator alloc] initWithDictionary:dictionary[kLiveCreator]]; 44 | } 45 | 46 | if(![dictionary[kLiveGroup] isKindOfClass:[NSNull class]]){ 47 | self.group = [dictionary[kLiveGroup] integerValue]; 48 | } 49 | 50 | if(![dictionary[kLiveIdField] isKindOfClass:[NSNull class]]){ 51 | self.idField = dictionary[kLiveIdField]; 52 | } 53 | if(![dictionary[kLiveLink] isKindOfClass:[NSNull class]]){ 54 | self.link = [dictionary[kLiveLink] integerValue]; 55 | } 56 | 57 | if(![dictionary[kLiveMulti] isKindOfClass:[NSNull class]]){ 58 | self.multi = [dictionary[kLiveMulti] integerValue]; 59 | } 60 | 61 | if(![dictionary[kLiveName] isKindOfClass:[NSNull class]]){ 62 | self.name = dictionary[kLiveName]; 63 | } 64 | if(![dictionary[kLiveOnlineUsers] isKindOfClass:[NSNull class]]){ 65 | self.onlineUsers = [dictionary[kLiveOnlineUsers] integerValue]; 66 | } 67 | 68 | if(![dictionary[kLiveOptimal] isKindOfClass:[NSNull class]]){ 69 | self.optimal = [dictionary[kLiveOptimal] integerValue]; 70 | } 71 | 72 | if(![dictionary[kLiveShareAddr] isKindOfClass:[NSNull class]]){ 73 | self.shareAddr = dictionary[kLiveShareAddr]; 74 | } 75 | if(![dictionary[kLiveSlot] isKindOfClass:[NSNull class]]){ 76 | self.slot = [dictionary[kLiveSlot] integerValue]; 77 | } 78 | 79 | if(![dictionary[kLiveStreamAddr] isKindOfClass:[NSNull class]]){ 80 | self.streamAddr = dictionary[kLiveStreamAddr]; 81 | } 82 | if(![dictionary[kLiveVersion] isKindOfClass:[NSNull class]]){ 83 | self.version = [dictionary[kLiveVersion] integerValue]; 84 | } 85 | 86 | return self; 87 | } 88 | 89 | 90 | /** 91 | * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property 92 | */ 93 | -(NSDictionary *)toDictionary 94 | { 95 | NSMutableDictionary * dictionary = [NSMutableDictionary dictionary]; 96 | if(self.city != nil){ 97 | dictionary[kLiveCity] = self.city; 98 | } 99 | if(self.creator != nil){ 100 | dictionary[kLiveCreator] = [self.creator toDictionary]; 101 | } 102 | dictionary[kLiveGroup] = @(self.group); 103 | if(self.idField != nil){ 104 | dictionary[kLiveIdField] = self.idField; 105 | } 106 | dictionary[kLiveLink] = @(self.link); 107 | dictionary[kLiveMulti] = @(self.multi); 108 | if(self.name != nil){ 109 | dictionary[kLiveName] = self.name; 110 | } 111 | dictionary[kLiveOnlineUsers] = @(self.onlineUsers); 112 | dictionary[kLiveOptimal] = @(self.optimal); 113 | if(self.shareAddr != nil){ 114 | dictionary[kLiveShareAddr] = self.shareAddr; 115 | } 116 | dictionary[kLiveSlot] = @(self.slot); 117 | if(self.streamAddr != nil){ 118 | dictionary[kLiveStreamAddr] = self.streamAddr; 119 | } 120 | dictionary[kLiveVersion] = @(self.version); 121 | return dictionary; 122 | 123 | } 124 | 125 | /** 126 | * Implementation of NSCoding encoding method 127 | */ 128 | /** 129 | * Returns all the available property values in the form of NSDictionary object where the key is the approperiate json key and the value is the value of the corresponding property 130 | */ 131 | - (void)encodeWithCoder:(NSCoder *)aCoder 132 | { 133 | if(self.city != nil){ 134 | [aCoder encodeObject:self.city forKey:kLiveCity]; 135 | } 136 | if(self.creator != nil){ 137 | [aCoder encodeObject:self.creator forKey:kLiveCreator]; 138 | } 139 | [aCoder encodeObject:@(self.group) forKey:kLiveGroup]; if(self.idField != nil){ 140 | [aCoder encodeObject:self.idField forKey:kLiveIdField]; 141 | } 142 | [aCoder encodeObject:@(self.link) forKey:kLiveLink]; [aCoder encodeObject:@(self.multi) forKey:kLiveMulti]; if(self.name != nil){ 143 | [aCoder encodeObject:self.name forKey:kLiveName]; 144 | } 145 | [aCoder encodeObject:@(self.onlineUsers) forKey:kLiveOnlineUsers]; [aCoder encodeObject:@(self.optimal) forKey:kLiveOptimal]; if(self.shareAddr != nil){ 146 | [aCoder encodeObject:self.shareAddr forKey:kLiveShareAddr]; 147 | } 148 | [aCoder encodeObject:@(self.slot) forKey:kLiveSlot]; if(self.streamAddr != nil){ 149 | [aCoder encodeObject:self.streamAddr forKey:kLiveStreamAddr]; 150 | } 151 | [aCoder encodeObject:@(self.version) forKey:kLiveVersion]; 152 | } 153 | 154 | /** 155 | * Implementation of NSCoding initWithCoder: method 156 | */ 157 | - (instancetype)initWithCoder:(NSCoder *)aDecoder 158 | { 159 | self = [super init]; 160 | self.city = [aDecoder decodeObjectForKey:kLiveCity]; 161 | self.creator = [aDecoder decodeObjectForKey:kLiveCreator]; 162 | self.group = [[aDecoder decodeObjectForKey:kLiveGroup] integerValue]; 163 | self.idField = [aDecoder decodeObjectForKey:kLiveIdField]; 164 | self.link = [[aDecoder decodeObjectForKey:kLiveLink] integerValue]; 165 | self.multi = [[aDecoder decodeObjectForKey:kLiveMulti] integerValue]; 166 | self.name = [aDecoder decodeObjectForKey:kLiveName]; 167 | self.onlineUsers = [[aDecoder decodeObjectForKey:kLiveOnlineUsers] integerValue]; 168 | self.optimal = [[aDecoder decodeObjectForKey:kLiveOptimal] integerValue]; 169 | self.shareAddr = [aDecoder decodeObjectForKey:kLiveShareAddr]; 170 | self.slot = [[aDecoder decodeObjectForKey:kLiveSlot] integerValue]; 171 | self.streamAddr = [aDecoder decodeObjectForKey:kLiveStreamAddr]; 172 | self.version = [[aDecoder decodeObjectForKey:kLiveVersion] integerValue]; 173 | return self; 174 | 175 | } 176 | 177 | /** 178 | * Implementation of NSCopying copyWithZone: method 179 | */ 180 | - (instancetype)copyWithZone:(NSZone *)zone 181 | { 182 | Live *copy = [Live new]; 183 | 184 | copy.city = [self.city copyWithZone:zone]; 185 | copy.creator = [self.creator copyWithZone:zone]; 186 | copy.group = self.group; 187 | copy.idField = [self.idField copyWithZone:zone]; 188 | copy.link = self.link; 189 | copy.multi = self.multi; 190 | copy.name = [self.name copyWithZone:zone]; 191 | copy.onlineUsers = self.onlineUsers; 192 | copy.optimal = self.optimal; 193 | copy.shareAddr = [self.shareAddr copyWithZone:zone]; 194 | copy.slot = self.slot; 195 | copy.streamAddr = [self.streamAddr copyWithZone:zone]; 196 | copy.version = self.version; 197 | 198 | return copy; 199 | } 200 | @end -------------------------------------------------------------------------------- /smallInke/UIImage+Add.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+Add.m 3 | // smallInke 4 | // 5 | // Created by Xiaoxueyuan on 12/9/16. 6 | // Copyright © 2016年 Xiaoxueyuan. All rights reserved. 7 | // 8 | 9 | #import "UIImage+Add.h" 10 | 11 | @implementation UIImage (Add) 12 | 13 | - (UIImage *)imageByRoundCornerRadius:(CGFloat)radius { 14 | return [self imageByRoundCornerRadius:radius borderWidth:0 borderColor:nil]; 15 | } 16 | 17 | - (UIImage *)imageByRoundCornerRadius:(CGFloat)radius 18 | borderWidth:(CGFloat)borderWidth 19 | borderColor:(UIColor *)borderColor { 20 | return [self imageByRoundCornerRadius:radius 21 | corners:UIRectCornerAllCorners 22 | borderWidth:borderWidth 23 | borderColor:borderColor 24 | borderLineJoin:kCGLineJoinMiter]; 25 | } 26 | 27 | - (UIImage *)imageByRoundCornerRadius:(CGFloat)radius 28 | corners:(UIRectCorner)corners 29 | borderWidth:(CGFloat)borderWidth 30 | borderColor:(UIColor *)borderColor 31 | borderLineJoin:(CGLineJoin)borderLineJoin { 32 | 33 | if (corners != UIRectCornerAllCorners) { 34 | UIRectCorner tmp = 0; 35 | if (corners & UIRectCornerTopLeft) tmp |= UIRectCornerBottomLeft; 36 | if (corners & UIRectCornerTopRight) tmp |= UIRectCornerBottomRight; 37 | if (corners & UIRectCornerBottomLeft) tmp |= UIRectCornerTopLeft; 38 | if (corners & UIRectCornerBottomRight) tmp |= UIRectCornerTopRight; 39 | corners = tmp; 40 | } 41 | 42 | UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale); 43 | CGContextRef context = UIGraphicsGetCurrentContext(); 44 | CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height); 45 | CGContextScaleCTM(context, 1, -1); 46 | CGContextTranslateCTM(context, 0, -rect.size.height); 47 | 48 | CGFloat minSize = MIN(self.size.width, self.size.height); 49 | if (borderWidth < minSize / 2) { 50 | UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectInset(rect, borderWidth, borderWidth) byRoundingCorners:corners cornerRadii:CGSizeMake(radius, borderWidth)]; 51 | [path closePath]; 52 | 53 | CGContextSaveGState(context); 54 | [path addClip]; 55 | CGContextDrawImage(context, rect, self.CGImage); 56 | CGContextRestoreGState(context); 57 | } 58 | 59 | if (borderColor && borderWidth < minSize / 2 && borderWidth > 0) { 60 | CGFloat strokeInset = (floor(borderWidth * self.scale) + 0.5) / self.scale; 61 | CGRect strokeRect = CGRectInset(rect, strokeInset, strokeInset); 62 | CGFloat strokeRadius = radius > self.scale / 2 ? radius - self.scale / 2 : 0; 63 | UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:strokeRect byRoundingCorners:corners cornerRadii:CGSizeMake(strokeRadius, borderWidth)]; 64 | [path closePath]; 65 | 66 | path.lineWidth = borderWidth; 67 | path.lineJoinStyle = borderLineJoin; 68 | [borderColor setStroke]; 69 | [path stroke]; 70 | } 71 | 72 | UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 73 | UIGraphicsEndImageContext(); 74 | return image; 75 | } 76 | 77 | - (UIImage *)imageByResizeToSize:(CGSize)size { 78 | if (size.width <= 0 || size.height <= 0) return nil; 79 | UIGraphicsBeginImageContextWithOptions(size, NO, self.scale); 80 | [self drawInRect:CGRectMake(0, 0, size.width, size.height)]; 81 | UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 82 | UIGraphicsEndImageContext(); 83 | return image; 84 | } 85 | 86 | - (UIImage *)imageByResizeToSize:(CGSize)size contentMode:(UIViewContentMode)contentMode { 87 | if (size.width <= 0 || size.height <= 0) return nil; 88 | UIGraphicsBeginImageContextWithOptions(size, NO, self.scale); 89 | [self drawInRect:CGRectMake(0, 0, size.width, size.height) withContentMode:contentMode clipsToBounds:NO]; 90 | UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 91 | UIGraphicsEndImageContext(); 92 | return image; 93 | } 94 | 95 | - (void)drawInRect:(CGRect)rect withContentMode:(UIViewContentMode)contentMode clipsToBounds:(BOOL)clips{ 96 | CGRect drawRect = CGRectFitWithContentMode(rect, self.size, contentMode); 97 | if (drawRect.size.width == 0 || drawRect.size.height == 0) return; 98 | if (clips) { 99 | CGContextRef context = UIGraphicsGetCurrentContext(); 100 | if (context) { 101 | CGContextSaveGState(context); 102 | CGContextAddRect(context, rect); 103 | CGContextClip(context); 104 | [self drawInRect:drawRect]; 105 | CGContextRestoreGState(context); 106 | } 107 | } else { 108 | [self drawInRect:drawRect]; 109 | } 110 | } 111 | 112 | 113 | CGRect CGRectFitWithContentMode(CGRect rect, CGSize size, UIViewContentMode mode) { 114 | rect = CGRectStandardize(rect); 115 | size.width = size.width < 0 ? -size.width : size.width; 116 | size.height = size.height < 0 ? -size.height : size.height; 117 | CGPoint center = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); 118 | switch (mode) { 119 | case UIViewContentModeScaleAspectFit: 120 | case UIViewContentModeScaleAspectFill: { 121 | if (rect.size.width < 0.01 || rect.size.height < 0.01 || 122 | size.width < 0.01 || size.height < 0.01) { 123 | rect.origin = center; 124 | rect.size = CGSizeZero; 125 | } else { 126 | CGFloat scale; 127 | if (mode == UIViewContentModeScaleAspectFit) { 128 | if (size.width / size.height < rect.size.width / rect.size.height) { 129 | scale = rect.size.height / size.height; 130 | } else { 131 | scale = rect.size.width / size.width; 132 | } 133 | } else { 134 | if (size.width / size.height < rect.size.width / rect.size.height) { 135 | scale = rect.size.width / size.width; 136 | } else { 137 | scale = rect.size.height / size.height; 138 | } 139 | } 140 | size.width *= scale; 141 | size.height *= scale; 142 | rect.size = size; 143 | rect.origin = CGPointMake(center.x - size.width * 0.5, center.y - size.height * 0.5); 144 | } 145 | } break; 146 | case UIViewContentModeCenter: { 147 | rect.size = size; 148 | rect.origin = CGPointMake(center.x - size.width * 0.5, center.y - size.height * 0.5); 149 | } break; 150 | case UIViewContentModeTop: { 151 | rect.origin.x = center.x - size.width * 0.5; 152 | rect.size = size; 153 | } break; 154 | case UIViewContentModeBottom: { 155 | rect.origin.x = center.x - size.width * 0.5; 156 | rect.origin.y += rect.size.height - size.height; 157 | rect.size = size; 158 | } break; 159 | case UIViewContentModeLeft: { 160 | rect.origin.y = center.y - size.height * 0.5; 161 | rect.size = size; 162 | } break; 163 | case UIViewContentModeRight: { 164 | rect.origin.y = center.y - size.height * 0.5; 165 | rect.origin.x += rect.size.width - size.width; 166 | rect.size = size; 167 | } break; 168 | case UIViewContentModeTopLeft: { 169 | rect.size = size; 170 | } break; 171 | case UIViewContentModeTopRight: { 172 | rect.origin.x += rect.size.width - size.width; 173 | rect.size = size; 174 | } break; 175 | case UIViewContentModeBottomLeft: { 176 | rect.origin.y += rect.size.height - size.height; 177 | rect.size = size; 178 | } break; 179 | case UIViewContentModeBottomRight: { 180 | rect.origin.x += rect.size.width - size.width; 181 | rect.origin.y += rect.size.height - size.height; 182 | rect.size = size; 183 | } break; 184 | case UIViewContentModeScaleToFill: 185 | case UIViewContentModeRedraw: 186 | default: { 187 | rect = rect; 188 | } 189 | } 190 | return rect; 191 | } 192 | 193 | @end 194 | -------------------------------------------------------------------------------- /smallInke/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 47 | 53 | 59 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | -------------------------------------------------------------------------------- /smallInke.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 6AAF9043E235FCE773C7A8AC /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B2BD5BE843C487DEDBEDBBD /* libPods.a */; }; 11 | A9C81EB01D86CAC60061A582 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A9C81EAF1D86CAC60061A582 /* main.m */; }; 12 | A9C81EB31D86CAC60061A582 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A9C81EB21D86CAC60061A582 /* AppDelegate.m */; }; 13 | A9C81EB61D86CAC60061A582 /* LiveListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9C81EB51D86CAC60061A582 /* LiveListViewController.m */; }; 14 | A9C81EB91D86CAC60061A582 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A9C81EB71D86CAC60061A582 /* Main.storyboard */; }; 15 | A9C81EBB1D86CAC60061A582 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A9C81EBA1D86CAC60061A582 /* Assets.xcassets */; }; 16 | A9C81EBE1D86CAC60061A582 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A9C81EBC1D86CAC60061A582 /* LaunchScreen.storyboard */; }; 17 | A9C81EC71D86CC3F0061A582 /* Creator.m in Sources */ = {isa = PBXBuildFile; fileRef = A9C81EC61D86CC3F0061A582 /* Creator.m */; }; 18 | A9C81ECA1D86CC700061A582 /* Live.m in Sources */ = {isa = PBXBuildFile; fileRef = A9C81EC91D86CC700061A582 /* Live.m */; }; 19 | A9C81ECD1D86CE900061A582 /* LiveListStore.m in Sources */ = {isa = PBXBuildFile; fileRef = A9C81ECC1D86CE900061A582 /* LiveListStore.m */; }; 20 | A9F922731D86D7AF00C64584 /* LiveCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A9F922721D86D7AF00C64584 /* LiveCell.m */; }; 21 | A9F922761D86E1EB00C64584 /* UIImage+Add.m in Sources */ = {isa = PBXBuildFile; fileRef = A9F922751D86E1EB00C64584 /* UIImage+Add.m */; }; 22 | A9F922791D86E40700C64584 /* LiveRoomViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9F922781D86E40700C64584 /* LiveRoomViewController.m */; }; 23 | /* End PBXBuildFile section */ 24 | 25 | /* Begin PBXFileReference section */ 26 | 6B2BD5BE843C487DEDBEDBBD /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; 27 | A8E0DA1ECE8BC913302CEDF9 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; 28 | A9C81EAB1D86CAC60061A582 /* smallInke.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = smallInke.app; sourceTree = BUILT_PRODUCTS_DIR; }; 29 | A9C81EAF1D86CAC60061A582 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 30 | A9C81EB11D86CAC60061A582 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 31 | A9C81EB21D86CAC60061A582 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 32 | A9C81EB41D86CAC60061A582 /* LiveListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LiveListViewController.h; sourceTree = ""; }; 33 | A9C81EB51D86CAC60061A582 /* LiveListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LiveListViewController.m; sourceTree = ""; }; 34 | A9C81EB81D86CAC60061A582 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 35 | A9C81EBA1D86CAC60061A582 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 36 | A9C81EBD1D86CAC60061A582 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 37 | A9C81EBF1D86CAC60061A582 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 38 | A9C81EC51D86CC3F0061A582 /* Creator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Creator.h; sourceTree = ""; }; 39 | A9C81EC61D86CC3F0061A582 /* Creator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Creator.m; sourceTree = ""; }; 40 | A9C81EC81D86CC700061A582 /* Live.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Live.h; sourceTree = ""; }; 41 | A9C81EC91D86CC700061A582 /* Live.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Live.m; sourceTree = ""; }; 42 | A9C81ECB1D86CE900061A582 /* LiveListStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveListStore.h; sourceTree = ""; }; 43 | A9C81ECC1D86CE900061A582 /* LiveListStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LiveListStore.m; sourceTree = ""; }; 44 | A9F922711D86D7AF00C64584 /* LiveCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveCell.h; sourceTree = ""; }; 45 | A9F922721D86D7AF00C64584 /* LiveCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LiveCell.m; sourceTree = ""; }; 46 | A9F922741D86E1EB00C64584 /* UIImage+Add.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Add.h"; sourceTree = ""; }; 47 | A9F922751D86E1EB00C64584 /* UIImage+Add.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Add.m"; sourceTree = ""; }; 48 | A9F922771D86E40700C64584 /* LiveRoomViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiveRoomViewController.h; sourceTree = ""; }; 49 | A9F922781D86E40700C64584 /* LiveRoomViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LiveRoomViewController.m; sourceTree = ""; }; 50 | CF4A80803885E28151D011FC /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; 51 | /* End PBXFileReference section */ 52 | 53 | /* Begin PBXFrameworksBuildPhase section */ 54 | A9C81EA81D86CAC60061A582 /* Frameworks */ = { 55 | isa = PBXFrameworksBuildPhase; 56 | buildActionMask = 2147483647; 57 | files = ( 58 | 6AAF9043E235FCE773C7A8AC /* libPods.a in Frameworks */, 59 | ); 60 | runOnlyForDeploymentPostprocessing = 0; 61 | }; 62 | /* End PBXFrameworksBuildPhase section */ 63 | 64 | /* Begin PBXGroup section */ 65 | 6C4C254727168FC739FCD57D /* Pods */ = { 66 | isa = PBXGroup; 67 | children = ( 68 | A8E0DA1ECE8BC913302CEDF9 /* Pods.debug.xcconfig */, 69 | CF4A80803885E28151D011FC /* Pods.release.xcconfig */, 70 | ); 71 | name = Pods; 72 | sourceTree = ""; 73 | }; 74 | A9C81EA21D86CAC60061A582 = { 75 | isa = PBXGroup; 76 | children = ( 77 | A9C81EAD1D86CAC60061A582 /* smallInke */, 78 | A9C81EAC1D86CAC60061A582 /* Products */, 79 | 6C4C254727168FC739FCD57D /* Pods */, 80 | C99BC21B0BAB249B881C77D3 /* Frameworks */, 81 | ); 82 | sourceTree = ""; 83 | }; 84 | A9C81EAC1D86CAC60061A582 /* Products */ = { 85 | isa = PBXGroup; 86 | children = ( 87 | A9C81EAB1D86CAC60061A582 /* smallInke.app */, 88 | ); 89 | name = Products; 90 | sourceTree = ""; 91 | }; 92 | A9C81EAD1D86CAC60061A582 /* smallInke */ = { 93 | isa = PBXGroup; 94 | children = ( 95 | A9C81EB11D86CAC60061A582 /* AppDelegate.h */, 96 | A9C81EB21D86CAC60061A582 /* AppDelegate.m */, 97 | A9C81EB41D86CAC60061A582 /* LiveListViewController.h */, 98 | A9C81EB51D86CAC60061A582 /* LiveListViewController.m */, 99 | A9F922771D86E40700C64584 /* LiveRoomViewController.h */, 100 | A9F922781D86E40700C64584 /* LiveRoomViewController.m */, 101 | A9F922741D86E1EB00C64584 /* UIImage+Add.h */, 102 | A9F922751D86E1EB00C64584 /* UIImage+Add.m */, 103 | A9C81ECB1D86CE900061A582 /* LiveListStore.h */, 104 | A9C81ECC1D86CE900061A582 /* LiveListStore.m */, 105 | A9F922711D86D7AF00C64584 /* LiveCell.h */, 106 | A9F922721D86D7AF00C64584 /* LiveCell.m */, 107 | A9C81EC51D86CC3F0061A582 /* Creator.h */, 108 | A9C81EC61D86CC3F0061A582 /* Creator.m */, 109 | A9C81EC81D86CC700061A582 /* Live.h */, 110 | A9C81EC91D86CC700061A582 /* Live.m */, 111 | A9C81EB71D86CAC60061A582 /* Main.storyboard */, 112 | A9C81EBA1D86CAC60061A582 /* Assets.xcassets */, 113 | A9C81EBC1D86CAC60061A582 /* LaunchScreen.storyboard */, 114 | A9C81EBF1D86CAC60061A582 /* Info.plist */, 115 | A9C81EAE1D86CAC60061A582 /* Supporting Files */, 116 | ); 117 | path = smallInke; 118 | sourceTree = ""; 119 | }; 120 | A9C81EAE1D86CAC60061A582 /* Supporting Files */ = { 121 | isa = PBXGroup; 122 | children = ( 123 | A9C81EAF1D86CAC60061A582 /* main.m */, 124 | ); 125 | name = "Supporting Files"; 126 | sourceTree = ""; 127 | }; 128 | C99BC21B0BAB249B881C77D3 /* Frameworks */ = { 129 | isa = PBXGroup; 130 | children = ( 131 | 6B2BD5BE843C487DEDBEDBBD /* libPods.a */, 132 | ); 133 | name = Frameworks; 134 | sourceTree = ""; 135 | }; 136 | /* End PBXGroup section */ 137 | 138 | /* Begin PBXNativeTarget section */ 139 | A9C81EAA1D86CAC60061A582 /* smallInke */ = { 140 | isa = PBXNativeTarget; 141 | buildConfigurationList = A9C81EC21D86CAC60061A582 /* Build configuration list for PBXNativeTarget "smallInke" */; 142 | buildPhases = ( 143 | 4CC98AF8C7FB747068B0CF34 /* Check Pods Manifest.lock */, 144 | A9C81EA71D86CAC60061A582 /* Sources */, 145 | A9C81EA81D86CAC60061A582 /* Frameworks */, 146 | A9C81EA91D86CAC60061A582 /* Resources */, 147 | 76F4A58174F1C8DE19558373 /* Embed Pods Frameworks */, 148 | 852AB216B8F7D33E9EFE7FD9 /* Copy Pods Resources */, 149 | ); 150 | buildRules = ( 151 | ); 152 | dependencies = ( 153 | ); 154 | name = smallInke; 155 | productName = smallInke; 156 | productReference = A9C81EAB1D86CAC60061A582 /* smallInke.app */; 157 | productType = "com.apple.product-type.application"; 158 | }; 159 | /* End PBXNativeTarget section */ 160 | 161 | /* Begin PBXProject section */ 162 | A9C81EA31D86CAC60061A582 /* Project object */ = { 163 | isa = PBXProject; 164 | attributes = { 165 | LastUpgradeCheck = 0730; 166 | ORGANIZATIONNAME = Xiaoxueyuan; 167 | TargetAttributes = { 168 | A9C81EAA1D86CAC60061A582 = { 169 | CreatedOnToolsVersion = 7.3.1; 170 | }; 171 | }; 172 | }; 173 | buildConfigurationList = A9C81EA61D86CAC60061A582 /* Build configuration list for PBXProject "smallInke" */; 174 | compatibilityVersion = "Xcode 3.2"; 175 | developmentRegion = English; 176 | hasScannedForEncodings = 0; 177 | knownRegions = ( 178 | en, 179 | Base, 180 | ); 181 | mainGroup = A9C81EA21D86CAC60061A582; 182 | productRefGroup = A9C81EAC1D86CAC60061A582 /* Products */; 183 | projectDirPath = ""; 184 | projectRoot = ""; 185 | targets = ( 186 | A9C81EAA1D86CAC60061A582 /* smallInke */, 187 | ); 188 | }; 189 | /* End PBXProject section */ 190 | 191 | /* Begin PBXResourcesBuildPhase section */ 192 | A9C81EA91D86CAC60061A582 /* Resources */ = { 193 | isa = PBXResourcesBuildPhase; 194 | buildActionMask = 2147483647; 195 | files = ( 196 | A9C81EBE1D86CAC60061A582 /* LaunchScreen.storyboard in Resources */, 197 | A9C81EBB1D86CAC60061A582 /* Assets.xcassets in Resources */, 198 | A9C81EB91D86CAC60061A582 /* Main.storyboard in Resources */, 199 | ); 200 | runOnlyForDeploymentPostprocessing = 0; 201 | }; 202 | /* End PBXResourcesBuildPhase section */ 203 | 204 | /* Begin PBXShellScriptBuildPhase section */ 205 | 4CC98AF8C7FB747068B0CF34 /* Check Pods Manifest.lock */ = { 206 | isa = PBXShellScriptBuildPhase; 207 | buildActionMask = 2147483647; 208 | files = ( 209 | ); 210 | inputPaths = ( 211 | ); 212 | name = "Check Pods Manifest.lock"; 213 | outputPaths = ( 214 | ); 215 | runOnlyForDeploymentPostprocessing = 0; 216 | shellPath = /bin/sh; 217 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 218 | showEnvVarsInLog = 0; 219 | }; 220 | 76F4A58174F1C8DE19558373 /* Embed Pods Frameworks */ = { 221 | isa = PBXShellScriptBuildPhase; 222 | buildActionMask = 2147483647; 223 | files = ( 224 | ); 225 | inputPaths = ( 226 | ); 227 | name = "Embed Pods Frameworks"; 228 | outputPaths = ( 229 | ); 230 | runOnlyForDeploymentPostprocessing = 0; 231 | shellPath = /bin/sh; 232 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n"; 233 | showEnvVarsInLog = 0; 234 | }; 235 | 852AB216B8F7D33E9EFE7FD9 /* Copy Pods Resources */ = { 236 | isa = PBXShellScriptBuildPhase; 237 | buildActionMask = 2147483647; 238 | files = ( 239 | ); 240 | inputPaths = ( 241 | ); 242 | name = "Copy Pods Resources"; 243 | outputPaths = ( 244 | ); 245 | runOnlyForDeploymentPostprocessing = 0; 246 | shellPath = /bin/sh; 247 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; 248 | showEnvVarsInLog = 0; 249 | }; 250 | /* End PBXShellScriptBuildPhase section */ 251 | 252 | /* Begin PBXSourcesBuildPhase section */ 253 | A9C81EA71D86CAC60061A582 /* Sources */ = { 254 | isa = PBXSourcesBuildPhase; 255 | buildActionMask = 2147483647; 256 | files = ( 257 | A9C81ECA1D86CC700061A582 /* Live.m in Sources */, 258 | A9F922731D86D7AF00C64584 /* LiveCell.m in Sources */, 259 | A9C81EC71D86CC3F0061A582 /* Creator.m in Sources */, 260 | A9C81EB61D86CAC60061A582 /* LiveListViewController.m in Sources */, 261 | A9C81ECD1D86CE900061A582 /* LiveListStore.m in Sources */, 262 | A9F922761D86E1EB00C64584 /* UIImage+Add.m in Sources */, 263 | A9C81EB31D86CAC60061A582 /* AppDelegate.m in Sources */, 264 | A9F922791D86E40700C64584 /* LiveRoomViewController.m in Sources */, 265 | A9C81EB01D86CAC60061A582 /* main.m in Sources */, 266 | ); 267 | runOnlyForDeploymentPostprocessing = 0; 268 | }; 269 | /* End PBXSourcesBuildPhase section */ 270 | 271 | /* Begin PBXVariantGroup section */ 272 | A9C81EB71D86CAC60061A582 /* Main.storyboard */ = { 273 | isa = PBXVariantGroup; 274 | children = ( 275 | A9C81EB81D86CAC60061A582 /* Base */, 276 | ); 277 | name = Main.storyboard; 278 | sourceTree = ""; 279 | }; 280 | A9C81EBC1D86CAC60061A582 /* LaunchScreen.storyboard */ = { 281 | isa = PBXVariantGroup; 282 | children = ( 283 | A9C81EBD1D86CAC60061A582 /* Base */, 284 | ); 285 | name = LaunchScreen.storyboard; 286 | sourceTree = ""; 287 | }; 288 | /* End PBXVariantGroup section */ 289 | 290 | /* Begin XCBuildConfiguration section */ 291 | A9C81EC01D86CAC60061A582 /* Debug */ = { 292 | isa = XCBuildConfiguration; 293 | buildSettings = { 294 | ALWAYS_SEARCH_USER_PATHS = NO; 295 | CLANG_ANALYZER_NONNULL = YES; 296 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 297 | CLANG_CXX_LIBRARY = "libc++"; 298 | CLANG_ENABLE_MODULES = YES; 299 | CLANG_ENABLE_OBJC_ARC = YES; 300 | CLANG_WARN_BOOL_CONVERSION = YES; 301 | CLANG_WARN_CONSTANT_CONVERSION = YES; 302 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 303 | CLANG_WARN_EMPTY_BODY = YES; 304 | CLANG_WARN_ENUM_CONVERSION = YES; 305 | CLANG_WARN_INT_CONVERSION = YES; 306 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 307 | CLANG_WARN_UNREACHABLE_CODE = YES; 308 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 309 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 310 | COPY_PHASE_STRIP = NO; 311 | DEBUG_INFORMATION_FORMAT = dwarf; 312 | ENABLE_STRICT_OBJC_MSGSEND = YES; 313 | ENABLE_TESTABILITY = YES; 314 | GCC_C_LANGUAGE_STANDARD = gnu99; 315 | GCC_DYNAMIC_NO_PIC = NO; 316 | GCC_NO_COMMON_BLOCKS = YES; 317 | GCC_OPTIMIZATION_LEVEL = 0; 318 | GCC_PREPROCESSOR_DEFINITIONS = ( 319 | "DEBUG=1", 320 | "$(inherited)", 321 | ); 322 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 323 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 324 | GCC_WARN_UNDECLARED_SELECTOR = YES; 325 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 326 | GCC_WARN_UNUSED_FUNCTION = YES; 327 | GCC_WARN_UNUSED_VARIABLE = YES; 328 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 329 | MTL_ENABLE_DEBUG_INFO = YES; 330 | ONLY_ACTIVE_ARCH = YES; 331 | SDKROOT = iphoneos; 332 | }; 333 | name = Debug; 334 | }; 335 | A9C81EC11D86CAC60061A582 /* Release */ = { 336 | isa = XCBuildConfiguration; 337 | buildSettings = { 338 | ALWAYS_SEARCH_USER_PATHS = NO; 339 | CLANG_ANALYZER_NONNULL = YES; 340 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 341 | CLANG_CXX_LIBRARY = "libc++"; 342 | CLANG_ENABLE_MODULES = YES; 343 | CLANG_ENABLE_OBJC_ARC = YES; 344 | CLANG_WARN_BOOL_CONVERSION = YES; 345 | CLANG_WARN_CONSTANT_CONVERSION = YES; 346 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 347 | CLANG_WARN_EMPTY_BODY = YES; 348 | CLANG_WARN_ENUM_CONVERSION = YES; 349 | CLANG_WARN_INT_CONVERSION = YES; 350 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 351 | CLANG_WARN_UNREACHABLE_CODE = YES; 352 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 353 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 354 | COPY_PHASE_STRIP = NO; 355 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 356 | ENABLE_NS_ASSERTIONS = NO; 357 | ENABLE_STRICT_OBJC_MSGSEND = YES; 358 | GCC_C_LANGUAGE_STANDARD = gnu99; 359 | GCC_NO_COMMON_BLOCKS = YES; 360 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 361 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 362 | GCC_WARN_UNDECLARED_SELECTOR = YES; 363 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 364 | GCC_WARN_UNUSED_FUNCTION = YES; 365 | GCC_WARN_UNUSED_VARIABLE = YES; 366 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 367 | MTL_ENABLE_DEBUG_INFO = NO; 368 | SDKROOT = iphoneos; 369 | VALIDATE_PRODUCT = YES; 370 | }; 371 | name = Release; 372 | }; 373 | A9C81EC31D86CAC60061A582 /* Debug */ = { 374 | isa = XCBuildConfiguration; 375 | baseConfigurationReference = A8E0DA1ECE8BC913302CEDF9 /* Pods.debug.xcconfig */; 376 | buildSettings = { 377 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 378 | INFOPLIST_FILE = smallInke/Info.plist; 379 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 380 | PRODUCT_BUNDLE_IDENTIFIER = com.xxycode.smallInke; 381 | PRODUCT_NAME = "$(TARGET_NAME)"; 382 | }; 383 | name = Debug; 384 | }; 385 | A9C81EC41D86CAC60061A582 /* Release */ = { 386 | isa = XCBuildConfiguration; 387 | baseConfigurationReference = CF4A80803885E28151D011FC /* Pods.release.xcconfig */; 388 | buildSettings = { 389 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 390 | INFOPLIST_FILE = smallInke/Info.plist; 391 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 392 | PRODUCT_BUNDLE_IDENTIFIER = com.xxycode.smallInke; 393 | PRODUCT_NAME = "$(TARGET_NAME)"; 394 | }; 395 | name = Release; 396 | }; 397 | /* End XCBuildConfiguration section */ 398 | 399 | /* Begin XCConfigurationList section */ 400 | A9C81EA61D86CAC60061A582 /* Build configuration list for PBXProject "smallInke" */ = { 401 | isa = XCConfigurationList; 402 | buildConfigurations = ( 403 | A9C81EC01D86CAC60061A582 /* Debug */, 404 | A9C81EC11D86CAC60061A582 /* Release */, 405 | ); 406 | defaultConfigurationIsVisible = 0; 407 | defaultConfigurationName = Release; 408 | }; 409 | A9C81EC21D86CAC60061A582 /* Build configuration list for PBXNativeTarget "smallInke" */ = { 410 | isa = XCConfigurationList; 411 | buildConfigurations = ( 412 | A9C81EC31D86CAC60061A582 /* Debug */, 413 | A9C81EC41D86CAC60061A582 /* Release */, 414 | ); 415 | defaultConfigurationIsVisible = 0; 416 | defaultConfigurationName = Release; 417 | }; 418 | /* End XCConfigurationList section */ 419 | }; 420 | rootObject = A9C81EA31D86CAC60061A582 /* Project object */; 421 | } 422 | --------------------------------------------------------------------------------