ANXMonitoringIOS
Anexia Monitoring IOS 框架,收集已安装所有 pods 的版本和许可证信息,并向 Anexia 的 API 发送查询以检查是否有更新可用。
示例
要运行示例项目,首先克隆仓库,然后从 Example 目录中运行 pod install
需求
- 第一步创建一个属性列表 (.plist) 文件。例如 'Frameworks.plist'。
- 检查您的 Pod 文件中的 Pods,并复制第一个 pod 的名称。
- 将此名称作为 plist 的键区域粘贴。
- 在 https://cocoapods.org.cn/ 中找到此 pod,例如 https://cocoapods.org.cn/pods/ANXMonitoringIOS
- 右键点击“查看 Podspec”按钮,然后按“复制链接地址”
- 返回您的 'Frameworks.plist' 文件,并将链接作为值粘贴。
键 | 类型 | 值 |
---|---|---|
▼根 | 字典 | (1 个值) |
ANXMonitoringIOS | 字符串 | https://github.com/CocoaPods/Specs/blob/master/Specs/3/4/b/ANXMonitoringIOS/1.0.3/ANXMonitoringIOS.podspec.json |
- 对所有 pods 重复此过程。
安装
ANXMonitoringIOS 通过 CocoaPods 提供使用。要安装它,只需将以下行添加到您的 Podfile 中
pod 'ANXMonitoringIOS'
使用说明
Swift
import ANXMonitoringIOS
...
DispatchQueue.main.async {
if let path = Bundle.main.path(forResource: "Frameworks", ofType: "plist"),
let nsDictionary = NSDictionary(contentsOfFile: path) {
//If you want to see the log use enableLog: true, if not use enableLog: false
let _ = Monitoring(nsDictionary, enableLog: true)
}
}
为了分享输出文件,在AppDelegate.swift中添加以下通知观察者
NotificationCenter.default.addObserver(self,selector: #selector(shareNotification),
name: NSNotification.Name(rawValue: "ANXMonitoringIOS"),object: nil)
...
@objc func shareNotification(notification: NSNotification){
if let dict = notification.userInfo as NSDictionary? {
if let jsonData = dict["json"] as? Data {
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = paths[0]
let filename = "\(documentsDirectory)/ANXMonitoringIOSOutput.json"
let fileURL = URL(fileURLWithPath: filename)
do {
try jsonData.write(to: fileURL, options: .atomic)
} catch {
print("Failed to write version monitoring json.")
}
let vc = UIActivityViewController(activityItems: [fileURL], applicationActivities: [])
self.window?.rootViewController?.present(vc, animated: true, completion: nil)
}
}
}
AppDelegate.swift中的最终结果如下所示
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
NotificationCenter.default.addObserver(self,selector: #selector(shareNotification),
name: NSNotification.Name(rawValue: "ANXMonitoringIOS"),object: nil)
DispatchQueue.main.async {
if let path = Bundle.main.path(forResource: "Frameworks", ofType: "plist"), let nsDictionary = NSDictionary(contentsOfFile: path) {
let _ = Monitoring(nsDictionary, enableLog: true)
}
}
return true
}
@objc func shareNotification(notification: NSNotification){
if let dict = notification.userInfo as NSDictionary? {
if let jsonData = dict["json"] as? Data {
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = paths[0]
let filename = "\(documentsDirectory)/ANXMonitoringIOSOutput.json"
let fileURL = URL(fileURLWithPath: filename)
do {
try jsonData.write(to: fileURL, options: .atomic)
} catch {
print("Failed to write version monitoring json.")
}
let vc = UIActivityViewController(activityItems: [fileURL], applicationActivities: [])
self.window?.rootViewController?.present(vc, animated: true, completion: nil)
}
}
}
Objective-C
#import "AppDelegate.h"
@import ANXMonitoringIOS;
#import "ANXMonitoringIOS-Swift.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(shareNotification:)
name:@"ANXMonitoringIOS"
object:nil];
dispatch_async(dispatch_get_main_queue(), ^{
NSString* path = [[NSBundle mainBundle] pathForResource:@"Frameworks" ofType:@"plist"];
NSDictionary* dict = [NSDictionary dictionaryWithContentsOfFile:path];
ObjCMonitoring *monitoring = [[ObjCMonitoring alloc] init:dict enableLog:YES];
});
return YES;
}
- (void) shareNotification:(NSNotification *) notification
{
NSDictionary *userInfo = notification.userInfo;
NSData *jsonData = [userInfo objectForKey:@"json"];
NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [[paths objectAtIndex:0]stringByAppendingPathComponent:@"ANXMonitoringIOSOutput.json"];
NSMutableArray *itemToShare = [[NSMutableArray alloc] init];
[itemToShare addObject:filePath];
if ([jsonData writeToFile:filePath atomically:YES]) {
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:itemToShare applicationActivities:nil];
activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll];
UIViewController *topController = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
while (topController.presentedViewController) {
topController = topController.presentedViewController;
}
[topController presentViewController:activityVC animated:YES completion:nil];
}
}
*** 请检查“构建设置”>“头文件搜索路径”,并将“${PODS_ROOT}/”添加为递归 ***
作者
Ali Safakli,移动开发者
许可证
MIT许可证(MIT)
版权所有(c)2019 ANEXIA Internetdienstleistungs GmbH
允许任何人在不收费的前提下复制此软件及其相关文档(“软件”),自由处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、许可和/或出售软件的副本,并允许向软件提供的人员这样做,前提是
以上版权声明和本许可声明应包含在软件的副本或大部分副本中。
该软件按原样提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权持有人不对任何索赔、损害或其他责任负责,无论是由合同、侵权或其他行为引起的,与软件或其使用或其它方式有关。