一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙ArkUI-X跨平臺開發(fā):【bility開發(fā)說明(iOS端)】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-05-21 14:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

通過Stage模型開發(fā)iOS端應(yīng)用指南

簡介

本文介紹將ArkUI框架擴展到iOS平臺所需要的必要類及其使用說明,開發(fā)者基于OpenHarmony,可復(fù)用大部分的應(yīng)用代碼(生命周期等)并可以部署到iOS平臺,降低跨平臺應(yīng)用開發(fā)成本。

ArkUI-X和iOS平臺集成所用關(guān)鍵類

開發(fā)前請熟悉鴻蒙開發(fā)指導(dǎo)文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

StageViewController

StageViewController是Stage模型iOS端視圖控制器基類,若要實現(xiàn)跨平臺基礎(chǔ)能力及觸發(fā)對應(yīng)ability生命周期,所有iOS端應(yīng)用級別的視圖控制器均要繼承于StageViewController。

公共屬性

  • instanceName:StageViewController唯一標識,拼接規(guī)則為 bundleName:moduleName:abilityName ,其中bundleName的值來自于OpenHarmony應(yīng)用中app.json5配置文件,moduleName、abilityName的值來自于OpenHarmony應(yīng)用中的module.json5配置文件。
@property (nonatomic, readonly) NSString *instanceName;
  • params:StageViewController外部屬性,用于startAbility時傳遞的want參數(shù)。
@property (nonatomic, strong) NSString *params;

初始化方法

- (instancetype)initWithInstanceName:(NSString *_Nonnull)instanceName;

StageApplication

StageApplication本質(zhì)上是一個調(diào)度類,主要用于觸發(fā)內(nèi)部相關(guān)類實現(xiàn)路徑解析與配置、注冊應(yīng)用相關(guān)的configuration信息、觸發(fā)ability部分生命周期事件等。

公共方法

  • 配置本地hap包路徑。
+ (void)configModuleWithBundleDirectory:(NSString *_Nonnull)bundleDirectory;
  • iOS應(yīng)用觸發(fā)StartAbility、配置進程id、本地化信息、configuration等。
+ (void)launchApplication;
  • 觸發(fā)ability進入前臺生命周期事件。
+ (void)callCurrentAbilityOnForeground;
  • 觸發(fā)ability進入后臺生命周期事件。
+ (void)callCurrentAbilityOnBackground;
  • 處理單/多實例ability。
+ (BOOL)handleSingleton:(NSString *)bundleName moduleName:(NSString *)moduleName abilityName:(NSString *)abilityName;
  • 釋放導(dǎo)航視圖棧內(nèi)的所有viewController,觸發(fā)OnDestory事件。
+ (void)releaseViewControllers;
  • 獲取導(dǎo)航視圖棧最頂層viewController。
+ (StageViewController *)getApplicationTopViewController;

AppDelegate內(nèi)關(guān)鍵實現(xiàn)參考

ArkUI應(yīng)用啟動及初始化

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // 配置hap包路徑
    [StageApplication configModuleWithBundleDirectory:@"arkui-x"];
    // 啟動ability
    [StageApplication launchApplication];
    
    // APP自啟動,初始化StageViewController子類VC,并設(shè)置為APP根視圖控制器
    if (!launchOptions.count) { 
        NSString *instanceName = [NSString stringWithFormat:@"%@:%@:%@",@"com.example.iosabilitystage", @"entry", @"MainAbility"];
        EntryMainViewController *mainView = [[EntryMainViewController alloc] initWithInstanceName:instanceName];
    UINavigationController *navi = [[UINavigationController alloc]initWithRootViewController:mainView];
        self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
        self.window.rootViewController = navi;
        [self.window makeKeyAndVisible];
    }
    return YES;
}

ArkUI應(yīng)用實現(xiàn)頁面跳轉(zhuǎn)

當(dāng)在iOS平臺上使用[startability]接口實現(xiàn)頁面跳轉(zhuǎn)時,需要參考下述示例進行開發(fā)。

  • 通過路由模式(openURL:)實現(xiàn)的iOS應(yīng)用頁面跳轉(zhuǎn)回調(diào),獲取傳遞參數(shù)
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary< NSString *,id > *)options {

    // 根據(jù)規(guī)則截取URL相應(yīng)參數(shù)
    NSString *bundleName = url.scheme;
    NSString *moduleName = url.host;
    NSString *abilityName, *params;

    NSURLComponents *urlComponents = [NSURLComponents componentsWithString:url.absoluteString];
    NSArray < NSURLQueryItem * > *array = urlComponents.queryItems;
    for (NSURLQueryItem * item in array) {
        if ([item.name isEqualToString:@"abilityName"]) {
            abilityName = item.value;
        } else if ([item.name isEqualToString:@"params"]) {
            params = item.value;
        }
    }
    // 單實例ability處理
    if ([StageApplication handleSingleton:bundleName moduleName:moduleName abilityName:abilityName] == YES) {
        return YES;
    }
    [self handleOpenUrlWithBundleName:bundleName
                           moduleName:moduleName
                          abilityName:abilityName
                               params:params, nil];
    return YES;
}
  • 通過解析url得到的參數(shù),映射ability對應(yīng)的viewController
- (BOOL)handleOpenUrlWithBundleName:(NSString *)bundleName
                         moduleName:(NSString *)moduleName
                        abilityName:(NSString *)abilityName
                             params:(NSString *)params, ...NS_REQUIRES_NIL_TERMINATION {
                                               
    NSString *instanceName = [NSString stringWithFormat:@"%@:%@:%@",bundleName, moduleName, abilityName];
    
    // 根據(jù)moduleName和abilityName映射對應(yīng)的viewController
    // 注意:傳入的moduleName或者abilityName錯誤,則無法找到對應(yīng)的viewController,此時無法打開頁面。
    if ([moduleName isEqualToString:@"entry"] && [abilityName isEqualToString:@"MainAbility"]) {
        EntryMainAbilityViewController *entryMainVC = [[EntryMainAbilityViewController alloc] initWithInstanceName:instanceName];
        entryMainVC.params = params;
    } else if ([moduleName isEqualToString:@"entry"] && [abilityName isEqualToString:@"Other"]) {
        EntryOtherViewController *entryOtherVC = [[EntryOtherViewController alloc] initWithInstanceName:instanceName];
        entryOtherVC.params = params;
    }

    return YES;
}

ArkUI應(yīng)用生命周期回調(diào)相應(yīng)處理

  • ArkUI應(yīng)用進入后臺,觸發(fā)對應(yīng)生命周期事件。
- (void)applicationDidEnterBackground:(UIApplication *)application {
    [StageApplication callCurrentAbilityOnBackground];
}
  • ArkUI應(yīng)用進入前臺,觸發(fā)對應(yīng)生命周期事件。
- (void)applicationWillEnterForeground:(UIApplication *)application {
    [StageApplication callCurrentAbilityOnForeground];
}
  • 終止ArkUI應(yīng)用程序進程。
- (void)applicationWillTerminate:(UIApplication *)application {
    [StageApplication releaseViewControllers];
}

具體方法使用參考samples示例

Ability與ViewController對應(yīng)規(guī)則

iOS端應(yīng)用info配置里的bundleName需要與Ability的bundleName一致。

iOS端應(yīng)用內(nèi)的viewController的viewControllerName組成規(guī)則:Ability的moduleName + Ability的abilityName + “viewController”。

stage_iOS

StageApplication初始化支持以下兩種方式

在didFinishLaunchingWithOptions函數(shù)中進行初始化

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // 配置hap包路徑
    [StageApplication configModuleWithBundleDirectory:@"arkui-x"];
    // 啟動ability
    [StageApplication launchApplication];

    // APP自啟動,初始化StageViewController子類VC,并設(shè)置為APP根視圖控制器
    if (!launchOptions.count) { 
        NSString *instanceName = [NSString stringWithFormat:@"%@:%@:%@",@"com.example.iosabilitystage", @"entry", @"MainAbility"];
        EntryMainViewController *mainView = [[EntryMainViewController alloc] initWithInstanceName:instanceName];
        UINavigationController *navi = [[UINavigationController alloc]initWithRootViewController:mainView];
        self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
        self.window.rootViewController = navi;
        [self.window makeKeyAndVisible];
    }
    return YES;
}

`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`

搜狗高速瀏覽器截圖20240326151547.png

在openURL回調(diào)函數(shù)中進行初始化

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 不在此處進行初始化

    ExampleViewController *mainView = [[ExampleViewController alloc] init];
    UINavigationController *navi = [[UINavigationController alloc]initWithRootViewController:mainView];
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.rootViewController = navi;
    [self.window makeKeyAndVisible];
    return YES;
}

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary< NSString *,id > *)options {

    // 初始化StageApplication
    [StageApplication configModuleWithBundleDirectory:@"arkui-x"];
    [StageApplication launchApplication];
    
    /*
    other code
    */
    return YES;
}

sf

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制器
    +關(guān)注

    關(guān)注

    114

    文章

    17116

    瀏覽量

    184439
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2623

    瀏覽量

    44076
  • OpenHarmony
    +關(guān)注

    關(guān)注

    29

    文章

    3856

    瀏覽量

    18652
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    鴻蒙ArkUI-X平臺開發(fā):【命令行工具(ACE Tools)】

    ACE Tools是一套為ArkUI-X項目平臺應(yīng)用開發(fā)者提供的命令行工具,支持在Windows/Ubuntu/macOS平臺運行,用于構(gòu)
    的頭像 發(fā)表于 05-21 17:39 ?2915次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>平臺</b><b class='flag-5'>開發(fā)</b>:【命令行工具(ACE Tools)】

    鴻蒙ArkUI-X平臺開發(fā):【SDK目錄結(jié)構(gòu)介紹】

    本文檔配套ArkUI-X,將OpenHarmony ArkUI開發(fā)框架擴展到不同的OS平臺,比如Android和iOS
    的頭像 發(fā)表于 05-20 16:28 ?1243次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>平臺</b><b class='flag-5'>開發(fā)</b>:【SDK目錄結(jié)構(gòu)介紹】

    鴻蒙ArkUI-X平臺開發(fā):【bility開發(fā)說明(Android平臺)】

    本文介紹將ArkUI框架擴展到Android平臺所需要的必要的類及其使用說明,開發(fā)者基于OpenHarmony,可復(fù)用大部分的應(yīng)用代碼(生命周期等)并可以部署到Android
    的頭像 發(fā)表于 05-21 10:54 ?1460次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>平臺</b><b class='flag-5'>開發(fā)</b>:【<b class='flag-5'>bility</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>說明</b>(Android<b class='flag-5'>平臺</b>)】

    ArkUI-X開發(fā)指南:【SDK配置和構(gòu)建說明

    ArkUI-X SDK是ArkUI-X開源項目的編譯產(chǎn)物,可將ArkUI-X SDK集成到現(xiàn)有Android和iOS應(yīng)用工程中,使開發(fā)者基于
    的頭像 發(fā)表于 05-25 16:48 ?3525次閱讀
    <b class='flag-5'>ArkUI-X</b><b class='flag-5'>開發(fā)</b>指南:【SDK配置和構(gòu)建<b class='flag-5'>說明</b>】

    ArkUI-X平臺框架接入指南

    ArkUI平臺框架(ArkUI-X)進一步將ArkUI開發(fā)框架擴展到了多個OS
    發(fā)表于 05-18 18:21

    ArkUI-X平臺應(yīng)用改造指南

    工作量大幅增加,開發(fā)成本也隨之上升,而且很難保持一致的交互體驗。 ArkUI-X 平臺框架是基于 HarmonyOS 打造的
    發(fā)表于 06-16 23:05

    ArkUI-X平臺技術(shù)落地-華為運動健康(一)

    開發(fā)工作量以及保證體驗一致性,對于運動健康A(chǔ)pp而言,顯得尤為重要。作為鴻蒙NEXT系統(tǒng)生態(tài)中的重要一員,ArkUI-X框架是我們平臺技術(shù)
    發(fā)表于 06-18 22:53

    ArkUI-X應(yīng)用工程結(jié)構(gòu)說明

    )并可以部署到相應(yīng)的OS平臺,降低平臺應(yīng)用開發(fā)成本。 應(yīng)用工程目錄結(jié)構(gòu)介紹 平臺應(yīng)用工程目錄
    發(fā)表于 06-19 23:11

    【HarmonyOS next】ArkUI-X新聞熱搜聚合App【進階】

    通過ArkUI-X鴻蒙下的新聞熱搜聚合App轉(zhuǎn)換為iOS 一、項目背景與技術(shù)選型 1.1 項目概述 本案例基于鴻蒙(HarmonyOS)開發(fā)
    發(fā)表于 06-28 21:43

    資訊速遞 | ArkUI-X 預(yù)覽版已正式開源!

    OpenHarmony項目群技術(shù)指導(dǎo)委員會(以下簡稱“TSC”)-平臺應(yīng)用開發(fā)框架TSG所孵化項目 —— ArkUI-X,近期已正式開源 ,開發(fā)
    發(fā)表于 08-11 16:10

    鴻蒙ArkUI-X平臺技術(shù):【開發(fā)準備】

    本文檔適用于ArkUI平臺應(yīng)用開發(fā)的初學(xué)者。通過開發(fā)環(huán)境搭建、應(yīng)用工程創(chuàng)建、編譯和運行,熟悉ArkUI
    的頭像 發(fā)表于 05-24 10:40 ?994次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>平臺</b>技術(shù):【<b class='flag-5'>開發(fā)</b>準備】

    鴻蒙ArkUI-X平臺技術(shù):【開發(fā)初體驗】

    在DevEco Studio中導(dǎo)入ArkUI-X Sample,快速創(chuàng)建平臺工程。
    的頭像 發(fā)表于 05-17 15:54 ?1247次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>平臺</b>技術(shù):【<b class='flag-5'>開發(fā)</b>初體驗】

    鴻蒙ArkUI-X平臺開發(fā):【 應(yīng)用工程結(jié)構(gòu)說明

    本文檔配套ArkUI-X,將OpenHarmony ArkUI開發(fā)框架擴展到不同的OS平臺,比如Android和iOS
    的頭像 發(fā)表于 05-19 21:05 ?961次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>平臺</b><b class='flag-5'>開發(fā)</b>:【 應(yīng)用工程結(jié)構(gòu)<b class='flag-5'>說明</b>】

    鴻蒙ArkUI-X語言調(diào)用說明平臺差異化【Android、ios動態(tài)化】

    ArkUI-X支持動態(tài)化,使用者可以根據(jù)自己需要動態(tài)發(fā)布平臺內(nèi)容,從而使平臺部分和宿主應(yīng)用進行解耦。
    的頭像 發(fā)表于 05-23 14:38 ?1491次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b>語言調(diào)用<b class='flag-5'>說明</b>:<b class='flag-5'>平臺</b>差異化【Android、<b class='flag-5'>ios</b>動態(tài)化】

    鴻蒙ArkUI-X框架開發(fā):【開發(fā)準備】

    本文檔適用于ArkUI-X框架開發(fā)的初學(xué)者。通過環(huán)境搭建、代碼下載、代碼編譯、API擴展和使用,快速了解平臺項目開發(fā)流程。
    的頭像 發(fā)表于 05-23 21:02 ?815次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b>框架<b class='flag-5'>開發(fā)</b>:【<b class='flag-5'>開發(fā)</b>準備】