如何检查iOS应用程序是否使用' StoreKit.framework'?

时间:2017-02-07 20:54:35

标签: ios storekit

我为iOS编写SDK,我想验证StoreKit.framework是否链接到使用我的SDK的应用程序,所以我运行:

if ([SKStoreProductViewController class]) {
        SKStoreProductViewController *storeController =
                        [[ SKStoreProductViewController alloc ] init ];
        // ...
    }

enter image description here

但即使StoreKit.framework未链接,[SKStoreProductViewController class仍会返回true

如何解决这个问题?

修改1

as @ x4h1d指出我创建了新的空项目并添加到默认的Controller:

BOOL isStoreKitAvailable = 
   (NSClassFromString(@"SKStoreProductViewController") != nil);

// => YES (there is no linked frameworks at all, why I get YES?)

修改2

我的配置文件已启用In-App Purchase(不是项目本身)

来自iOS应用ID的

enter image description here

然而来自Xcode:

enter image description here

也许这就是为什么即使空的应用程序都有内置 StoreKit?

4 个答案:

答案 0 :(得分:2)

您可以使用以下代码检查商店套件的可用性。

func checkStoreKitAvailibility() -> Bool {
    for bundle in Bundle.allFrameworks {
        if ((bundle.classNamed("SKStoreProductViewController")) != nil) {
            return true;
        }
    }
    return false;
}

编辑: 对于Objective-C,您可以使用:

- (BOOL)checkStoreKitAvailibility {

    for (NSBundle *bundle in NSBundle.allFrameworks) {
        if ([bundle classNamed:@"SKStoreProductViewController"]) {
            return YES;
        }
    }
    return NO;
}

答案 1 :(得分:0)

在链接的框架和库中,将其设为Optional而不是Required。因此,如果应用程序开发人员希望它实现,那么他将在应用程序中将框架标记为Required。现在,如果您使用[SKStoreProductViewController class]。它可能崩溃使用NSStringFromClass(@"SKStoreProductViewController")来确定它是否可以安全使用它。

答案 2 :(得分:0)

for (i=1; i<=count; ++i) print idDict[idArr[i]]

来自NSBundle

  public int largestColumnSum(){
     int sum = 0;
     for (int i=0;i<array[0].length;i++){
        for(int j=0; j<array.length; j++){
           sum += array[j][i];

返回值

表示框架的所有应用程序包的数组。仅包含其中包含一个或多个Objective-C类的框架。

导入声明

//SWIFT 
class func allFrameworks() -> [AnyObject]

//OBJECTIVE-C
+ (NSArray *)allFrameworks

<强>状况

+allFrameworks
Returns an array of all of the application’s bundles that represent frameworks.

如何使用

import Foundation - &gt;返回项目中所有框架使用的数组。

您可以使用Available in iOS 2.0 and later. 循环播放包含(NSBundle.allFrameworks()或不在下面进行检查。

斯威夫特:---

for

目标C:---

storeKit.framework

here

中查找更多参考资料

答案 3 :(得分:0)

在Xcode中,

当我们在In-App purchase下启用Capabilities时,Xcode会自动链接StoreKit.frameworkAdd the In-App purchase feature to our App ID。同样,如果我们的App ID已经启用了In-App购买,也会发生同样的情况。

简单地说,

BOOL isStoreKitAvailable = (NSClassFromString(@"SKStoreProductViewController") != nil);

我希望这对你有所帮助。