iOS AppStore 评分内嵌跳转Demo

今天整理了下评分模块,总结了2种进入App Store页面评分的方式,记录下来,分享给大家
分别是:
1.直接跳转至AppStore商店应用。
2.应用内部嵌入AppStore商店应用。
Demo例子地址:https://github.com/arrfu/appStoreScoreDemo

方法一:直接通过URL地址跳转至AppStore


+(void)turnIntoAppStoreScoresUrl:(NSString *)url appID:(NSString *)ID{
    
    NSString *appUrl = [NSString stringWithFormat:@"%@%@",url,ID];
    
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:appUrl]];
}

NSString *appID = @"1037988113";
NSString *appUrl = @"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=";
   
[SLTurnIntoAppStoreScores turnIntoAppStoreScoresUrl:appUrl appID:appID];

方法二:通过调用SKStoreProductViewController类,在应用中嵌入AppStore商店
从iOS6以后苹果提供了在应用内部打开App Store中某一个应用下载页面的方式,提供了一个SKStoreProductViewController的类对该功能进行支持。
使用条件:
1.导入#import <StoreKit/StoreKit.h>
2.遵守这个协议设置代理。 3.调用以下代码即可:


/**
 * 实例化一个SKStoreProductViewController类
 */
- (void)openAppWithIdentifier:(NSString *)appId {
    SKStoreProductViewController *storeProductVC = [[SKStoreProductViewController alloc] init];
    storeProductVC.delegate = self;
    
    NSDictionary *dict = [NSDictionary dictionaryWithObject:appId forKey:SKStoreProductParameterITunesItemIdentifier];
    [storeProductVC loadProductWithParameters:dict completionBlock:^(BOOL result, NSError *error) {
        if (result) {
            [self presentViewController:storeProductVC animated:YES completion:nil];
        }
    }];
}


#pragma mark - SKStoreProductViewControllerDelegate 嵌入应用商店
/**
 * 按取消按钮Cancel返回所调用代理方法,此处返回到ViewController控制器
 */
- (void)productViewControllerDidFinish:(SKStoreProductViewController *)storeProductVC {
    [storeProductVC dismissViewControllerAnimated:YES completion:^{
        ViewController *moreVc = [[ViewController alloc]init];
        [self.navigationController pushViewController:moreVc animated:YES];
    }];
    
}

// 使用   
[self openAppWithIdentifier:@"1037988113"];

参考资料来源:
http://www.tuicool.com/articles/ZZzQru

iOS 类前缀使用原则

前缀

在Objective-C应用中的所有类名都必须是全局唯一的。由于很多不同的框架中会有一些相似的功能,所以在名字上也可能
会有重复(users, views, requests / responses 等等),所以苹果官方文档规定类名需要有2-3个字母作为前缀。

类前缀

苹果官方建议两个字母作为前缀的类名是为官方的库和框架准备的,而对于作为第三方开发者的我们,官方建议使用3个或
者更多的字母作为前缀去命名我们的类:
官网地址: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Conventions

一个资深的Mac或iOS开发者可能会记得下面大部分的缩写标识符:

Prefix Frameworks
AB AddressBook / AddressBookUI
AC Accounts
AD iAd
AL AssetsLibrary
AU AudioUnit
AV AVFoundation
CA CoreAnimation
CB CoreBluetooth
CF CoreFoundation / CFNetwork
CG CoreGraphics / QuartzCore / ImageIO
CI CoreImage
CL CoreLocation
CM CoreMedia / CoreMotion
CV CoreVideo
EA ExternalAccessory
EK EventKit / EventKitUI
GC GameController
GLK GLKit
JS JavaScriptCore
MA MediaAccessibility
MC MultipeerConnectivity
MF MessageUI
MIDI CoreMIDI
MK MapKit
MP MediaPlayer
NK NewsstandKit
NS Foundation, AppKit, CoreData
PK PassKit
QL QuickLook
SC SystemConfiguration
Se Security
SK StoreKit / SpriteKit
SL Social
SS Safari Services
TW Twitter
UI UIKit
UT MobileCoreServices

第三方类前缀

直到最近,由于CocoaPods的出现和大量新的iOS开发者的涌现,开源代码的遍布,第三方代码在很大程度上对苹果和其余的Objective-C开发社区来说已经不是问题了。最近苹果官方的命名指南也发生了变化,它将三个字母作为前缀的建议只是做为一个习惯做法。

正因为这样,那些已经存在的第三方库依然使用2个字母作为前缀,你可以参考一些那些在GitHub上得到很多start的Objective-C的仓库。

Prefix Frameworks
AF AFNetworking (“Alamofire”)
RK RestKit
PU GPUImage
SD SDWebImage
MB MBProgressHUD
FB Facebook SDK
FM FMDB (“Flying Meat”)
JK JSONKit
UI FlatUI
NI Nimbus
AC Reactive Cocoa

我们已经看到这个第三方库的前缀已经和我的AFNetworking一样了,所以最好还是要在你的代码中遵守要三个字母以上的作为类前缀的规定。

参考资料来源:
http://mobile.51cto.com/hot-437049.htm

iOS 获取设备机器型号

获取iPhone手机设备型号:

#import <sys/utsname.h>

struct utsname systemInfo;
uname(&systemInfo);
NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
NSLog(@"machine = %@",deviceString);

输出为:machine = iPhone5,2
此方法可以获取手机硬件设备的机器型号,如iPhone5,iPhone5S,iPhone6,iPhone6S等。

参考资料来源:
http://blog.sina.com.cn/s/blog_6f0c918801015lhy.html

iOS 设置文字属性

addAttribute:value:range:叠加或合并原有文字属性

参考资料来源: http://blog.csdn.net/a451493485/article/details/9454695
http://blog.csdn.net/yongyinmg/article/details/45933771

iOS 后台无限运行

1.各个程序运行状态时代理的回调:

  • (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    告诉代理进程启动但还没进入状态保存
  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    告诉代理启动基本完成程序准备开始运行
  • (void)applicationWillResignActive:(UIApplication *)application
    当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了
  • (void)applicationDidBecomeActive:(UIApplication *)application
    当应用程序入活动状态执行,这个刚好跟上面那个方法相反
  • (void)applicationDidEnterBackground:(UIApplication *)application
    当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
  • (void)applicationWillEnterForeground:(UIApplication *)application
    当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。
  • (void)applicationWillTerminate:(UIApplication *)application
    当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。
  • (void)applicationDidFinishLaunching:(UIApplication*)application
    当程序载入后执行

    根据苹果文档中关于后台执行的描述,任何app都有10分钟左右的后台任务执行时间。 10分钟后,app会被iOS强行挂起。

但是,有5类app允许有“无限的”后台运行时间:

  1. Audio。

  2. Location/GPS。

  3. VoIP。

  4. Newsstand。

  5. Exernal Accessory 。

资料来源:

后台无线运行Demo源代码:https://github.com/mddios/runInBackground
http://www.cnblogs.com/stoic/archive/2012/10/08/2785182.html
http://www.2cto.com/kf/201401/273820.html