1. 程式人生 > >iOS native APP和safari開發知識點整理

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 APPsafari開發知識點整理

native APP開發和web已經是很熟悉的套路了,但是最近幾周看下來,有了更深入的瞭解,不由的感嘆技術的研究是無止境的。 1、APP申請後臺常駐許可權: 只要在info.plist裡宣告使用audio play等許可權,那麼可以獲得一定時間內後臺生命。 在APP被切

快速瞭解“雲原生”(Cloud Native前端開發的技術結合點

歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 後端視角,結合點就是通過前端流控緩解後端的壓力,提升系統響應能力。 從一般意義理解,Cloud Native 是後端應用的事情,要搞的是系統解耦、橫向擴充套件,玩的是容器、微服務和 DevOps工具鏈。 從業務發展的角度來看,

SpringSpringboot相關知識點整理

# 簡介 本文主要整理一些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 APPAPPAPPSafari間的跳轉

原文: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

iosmac開發 學習資料

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.文檔不是萬能的,如果文檔查看

安卓iosapp證書過期的相關問題匯總

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) 狹義定義: