我为iOS编写SDK,我想验证StoreKit.framework
是否链接到使用我的SDK的应用程序,所以我运行:
if ([SKStoreProductViewController class]) {
SKStoreProductViewController *storeController =
[[ SKStoreProductViewController alloc ] init ];
// ...
}
但即使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
(不是项目本身)
:
然而来自Xcode:
也许这就是为什么即使空的应用程序都有内置 StoreKit?
答案 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.framework
和Add the In-App purchase feature to our App ID
。同样,如果我们的App ID已经启用了In-App购买,也会发生同样的情况。
简单地说,
BOOL isStoreKitAvailable = (NSClassFromString(@"SKStoreProductViewController") != nil);
我希望这对你有所帮助。