iOS native APP和safari開發知識點整理
native APP開發和web已經是很熟悉的套路了,但是最近幾周看下來,有了更深入的瞭解,不由的感嘆技術的研究是無止境的。
1、APP申請後臺常駐許可權:
只要在info.plist裡宣告使用audio play等許可權,那麼可以獲得一定時間內後臺生命。
在APP被切入後臺時,在AppDelegate的
func applicationDidEnterBackground(_ application: UIApplication) {}
方法中,可以被觸發,此時可以計算剩餘的時間,在結束前再次申請使用資源,以此迴圈,可以無限後臺執行;注意這裡直接使用timeout定時任務在真機上出錯,需要手寫定時方法。
2、後臺執行的APP調起其他應用
非常令人吃驚,後臺執行的APP可以輕易的調起其他應用,甚至包括自己,這裡是一個OC的方法,前提是需要知道目標APP的bundle identifier(bundle ID)
- (void)openAppByBundleID{
Class lsawsc = objc_getClass("LSApplicationWorkspace");
NSObject* workspace = [lsawsc performSelector:NSSelectorFromString(@"defaultWorkspace")];
// iOS6 沒有defaultWorkspace
if ([workspace respondsToSelector:NSSelectorFromString(@"openApplicationWithBundleID:")])
{ [workspace performSelector:NSSelectorFromString(@"openApplicationWithBundleID:") withObject:@"com.xx.demo"]}
}
3、safari調起 APP
app包檔案,檢視內容,可以在info.plist的URL Type中,看到配置的短連結(可能有多個),瀏覽器可以直接通過短連結調起APP.
4、app下載lua指令碼動態執行方法;
未完待續
5、app通過webview開啟網頁(注入UA),並分析dom;
6、檢查其他APP的安裝情況OC
(1)iOS 11及以上
- (void)getAppsOveriOS11{
NSBundle *container = [NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/MobileContainerManager.framework"];
if ([container load]) {
Class appContainer = NSClassFromString(@"MCMAppContainer");
id test = [appContainer performSelector:@selector(containerWithIdentifier:error:) withObject:@"com.rovio.angrybirdsfight" withObject:nil];
//bundleId 事先在appstore手工檢視,pp助手mac版,只能逐個核對是否已安裝
/*
解壓該檔案
解壓後的根目錄下會看到一個字尾名為iTunesMetadata.plist的檔案
mac下直接開啟這個檔案,windows可以用plist editor開啟
搜尋"softwareVersionBundleId"
下面一行的com..就是這個APP的bundleID
*/
NSLog(@"%@",test);
if (test) {
NSLog(@"yes");
} else {
NSLog(@"no");
}
}
}
(2)iOS11以下
- (void)getAppsUnderiOS11{
//ios 11以下可以
NSLog(@"get all apps");
Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
NSObject *workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
NSArray *apps = [workspace performSelector:@selector(allInstalledApplications)];
Class LSApplicationProxy_class = objc_getClass("LSApplicationProxy");
for (int i = 0; i < apps.count; i++) {
NSObject *temp = apps[i];
if ([temp isKindOfClass:LSApplicationProxy_class]) {
//應用的bundleId
NSString *appBundleId = [temp performSelector:NSSelectorFromString(@"applicationIdentifier")];
//應用的名稱
NSString *appName = [temp performSelector:NSSelectorFromString(@"localizedName")];
//應用的型別是系統的應用還是第三方的應用
NSString * type = [temp performSelector:NSSelectorFromString(@"applicationType")];
//應用的版本
NSString * shortVersionString = [temp performSelector:NSSelectorFromString(@"shortVersionString")];
NSLog(@"型別=%@應用的BundleId=%@ ++++應用的名稱=%@版本號=%@",type,appBundleId,appName,shortVersionString);
}
}
}
7、檢查正在執行的其他APP,待驗證
- (void)getRunningApp{
NSArray * processes = [[UIDevice currentDevice] runningProcesses];
NSLog(@"aaaa");
if(processes){
for (NSDictionary * dict in processes){
NSLog(@"%@ - %@", [dict objectForKey:@"ProcessID"], [dict objectForKey:@"ProcessName"]);
}
}else{
NSLog(@"processes is null");
}
}
h檔案單獨宣告
@interface UIDevice (ProcessesAdditions)
- (NSArray *)runningProcesses;
@end
m檔案
@implementation UIDevice (ProcessesAdditions)
- (NSArray *)runningProcesses {
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0};
size_t miblen = 4;
size_t size=1000038592;
/*
size_t size
size 不賦予值,在真機上報記憶體分配錯誤
malloc: *** mach_vm_map(size=8637038592) failed (error code=3)
iOS真機還是有問題
*/
int st = sysctl(mib, miblen, NULL, &size, NULL, 0);
struct kinfo_proc * process = NULL;
struct kinfo_proc * newprocess = NULL;
do {
NSLog(@"2222");
size += size / 10;
newprocess = realloc(process, size);
NSLog(@"333");
if (!newprocess){
if (process){
free(process);
}
NSLog(@"4444");
return nil;
}
NSLog(@"77777");
process = newprocess;
st = sysctl(mib, miblen, process, &size, NULL, 0);
NSLog(@"8888");
} while (st == -1 && errno == ENOMEM);
NSLog(@"9999");
if (st == 0){
if (size % sizeof(struct kinfo_proc) == 0){
int nprocess = size / sizeof(struct kinfo_proc);
if (nprocess){
NSMutableArray * array = [[NSMutableArray alloc] init];
for (int i = nprocess - 1; i >= 0; i--){
NSString * processID = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_pid];
NSString * processName = [[NSString alloc] initWithFormat:@"%s", process[i].kp_proc.p_comm];
NSDictionary * dict = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:processID, processName, nil]
forKeys:[NSArray arrayWithObjects:@"ProcessID", @"ProcessName", nil]];
// [processID release];
// [processName release];
[array addObject:dict];
// [dict release];
}
free(process);
// return [array autorelease];
return array;
}
}
}
return nil;
}
@end
相關推薦
iOS native APP和safari開發知識點整理
native APP開發和web已經是很熟悉的套路了,但是最近幾周看下來,有了更深入的瞭解,不由的感嘆技術的研究是無止境的。 1、APP申請後臺常駐許可權: 只要在info.plist裡宣告使用audio play等許可權,那麼可以獲得一定時間內後臺生命。 在APP被切
快速瞭解“雲原生”(Cloud Native)和前端開發的技術結合點
歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 後端視角,結合點就是通過前端流控緩解後端的壓力,提升系統響應能力。 從一般意義理解,Cloud Native 是後端應用的事情,要搞的是系統解耦、橫向擴充套件,玩的是容器、微服務和 DevOps工具鏈。 從業務發展的角度來看,
Spring和Springboot相關知識點整理
# 簡介 本文主要整理一些Spring & SpringBoot應用時和相關原理的知識點,對於原始碼不做沒有深入的講解。 #1. 思維導圖 右鍵新視窗開啟可以放大。 ![](https://img2020.cnblogs.com/blog/228024/202006/228024-2020062414175
怎樣在ios中的Safari內開發出一款類似native app一樣的全屏webapp
此文章轉自我www.gbtags.com的文章。 <meta name="format-detection" content="telephone=no email=no" /> 1.在meta中取消電話郵箱的識別。 <metaname="appl
詳細講解如何在windows下搭建react-native的開發環境(包括在裝置上安裝和執行react-native app )!
我之前在增加完變數後,react-native命令不起作用了,後來重新安裝react-native解決了此問題. 開啟安裝好的android stdio,然後start一個專案,下一步下一步,然後找到這個按鈕,這個是啟動模擬器的鍵,如果沒有安裝模擬器的話,可以選一個手機型號來下載,找到對應你的電腦的
IOS APP與APP和APP與Safari間的跳轉
原文:http://blog.csdn.net/lc_obj/article/details/38128557 最近做專案遇到這麼一個需求:從APP 跳轉到 Safari 然後再跳回APP 。以前做過從APP 跳到Safari ,很簡單,這裡就不多說了。重點說一下從
(iOS開發)IOS 9 APP版本檢驗更新和跳轉
/** * 判斷app安裝版本和商店版本的比較 */ -(void)judgeAPPVersion { // https://itunes.apple.com/lookup?id=604685049 NSString *urlStr
iOS 開發一些常用外掛和第三方庫的整理
一:第三方外掛 1:基於響應式程式設計思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https://github.com/jdg/MBProgressHUD 3:XML/H
Hybrid App 和 React Native 開發那點事
簡介:Hybrid App(混合模式移動應用)開發是指介於Web-app、Native-App這兩者之間的一種開發模式,兼具「Native App 良好使用者互動體驗的優勢」和「Web App 跨平臺開發的優勢」。很多人都知道,React Native 是 Fa
Kotlin 一統天下?Kotlin/Native 開始支援 iOS 和 Web 開發
KotlinConf 大會宣佈了 Kotlin 1.2 RC 版,並宣佈 Kotlin/Native 已支援用於開發 iOS 應用和 Web 應用開發。 首屆官方舉辦的 Kotlin 專題會議 K
ios和mac開發 學習資料
wal margin url href rgb ext man tails style 1.WWDC14 Session 409 學習筆記: http://url.cn/Ju2Yt5 2..WWDC14 Session 4092學習筆記: http://url.cn/R
這些HTML、CSS知識點,面試和平時開發都需要 No8-No9(知識點:媒體操作、構建表單)
password 添加屬性 自己 oval 系列 文件上傳 htm color eth 系列知識點匯總 這些HTML、CSS知識點,面試和平時開發都需要 No1-No4(知識點:HTML、CSS、盒子模型、內容布局) 這些HTML、CSS知識點,
【如何快速的開發一個完整的iOS直播app】(原理篇)
事先 打開 用戶訪問 rtsp 轉換成 統計信息 轉碼 均衡負載 適合 壓縮前的每秒數據量:幀率X分辨率(單位應該是若幹個字節) 壓縮比:壓縮前的每秒數據量/碼率 (對於同一個視頻源並采用同一種視頻編碼算法,則:壓縮比越高,畫面質量越差。) 視頻文件格式:文件的後綴,
Native App開發 與Web App開發(原生與web開發優缺點)
-s 功能 app開發 審核 發布 操作系統 back 利用 在雲端 Native App開發 Native App開發即我們所稱的傳統APP開發模式(原生APP開發模式),該開發針對IOS、Android等不同的手機操作系統要采用不同的語言和框架進行開發,該模式通常
UI設計規範整理一iOS字體和切圖及規範
icon 頁面設計 nologin 例如 必須 協作 設計規範 ogr 喜歡 UI設計規範一iOS字體和切圖及規範 說明: 1.對象為程序員等開發人員。 2.方法有千種,僅供參考。 3.文檔的本質是備份與查看,對外方便協作與對內提升效率。 4.文檔不是萬能的,如果文檔查看
安卓和ios的app證書過期的相關問題匯總
shu store 國家 部分 流程 apk 公私鑰 調試 匯總 一,ios的APP的發布流程請見:ios的APP的發布流程 http://www.jianshu.com/p/b1b77d804254 這篇文章寫得很好很全面 二,app證書過期了怎麽辦: IOS的情況:
簡練軟考知識點整理-ABC成本法和ABC分析圖法
shadow center .com ext 分析 通過 整理 資源 vpd ABC成本法即基於活動的成本計算法,ABC成本法主要用於對現有流程的描述和成本分析。ABC成本法和價值鏈分析法有某種程度的相似,都是將現有的業務進行分解,找出基本活動。但作業成本分析法著重
[編譯] 6、開源兩個簡單且有用的安卓APP命令行開發工具和nRF51822命令行開發工具
android 關註 eabi ref 文件 不存在 alt stdin vim 星期四, 27. 九月 2018 12:00上午 - BEAUTIFULZZZZ 一、前言 前幾天給大家介紹了如何手動搭建安卓APP命令行開發環境和nRF51822命令行開發環境,中秋這
Android APP和 Weex混合開發從環境搭建到APP工程執行
一、簡言 目前Android可行的混合程式設計方案有Weex和ReactNative兩種方案,兩者基本類同,只是使用框架技術有點不一樣。從網上的資料可以查知到Weex相比ReactNative更容易上手,另外ReactNative在處理IOS端的長列表時容易出現記憶體洩漏。關於Weex和
【C語言實現串列埠通訊知識點整理(四)】關於執行緒和程序
轉載:https://www.cnblogs.com/fuchongjundream/p/3829508.html 因為在外部檔案中呼叫結構體沒有用extern修飾,導致獲取不到正確的值,一直糾結線上程上。現在大概總結執行緒和程序的特點: 概念 1、程序(process) 狹義定義: