在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

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

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-05-21 14:35 ? 次閱讀

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

簡介

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

ArkUI-X和iOS平臺集成所用關鍵類

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

StageViewController

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

公共屬性

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

初始化方法

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

StageApplication

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

公共方法

  • 配置本地hap包路徑。
+ (void)configModuleWithBundleDirectory:(NSString *_Nonnull)bundleDirectory;
  • iOS應用觸發(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;
  • 釋放導航視圖棧內的所有viewController,觸發(fā)OnDestory事件。
+ (void)releaseViewControllers;
  • 獲取導航視圖棧最頂層viewController。
+ (StageViewController *)getApplicationTopViewController;

AppDelegate內關鍵實現(xiàn)參考

ArkUI應用啟動及初始化

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

    // 配置hap包路徑
    [StageApplication configModuleWithBundleDirectory:@"arkui-x"];
    // 啟動ability
    [StageApplication launchApplication];
    
    // APP自啟動,初始化StageViewController子類VC,并設置為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應用實現(xiàn)頁面跳轉

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

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

    // 根據(jù)規(guī)則截取URL相應參數(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對應的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映射對應的viewController
    // 注意:傳入的moduleName或者abilityName錯誤,則無法找到對應的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應用生命周期回調相應處理

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

具體方法使用參考samples示例

Ability與ViewController對應規(guī)則

iOS端應用info配置里的bundleName需要與Ability的bundleName一致。

iOS端應用內的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,并設置為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回調函數(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

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

    關注

    112

    文章

    16384

    瀏覽量

    178352
  • 鴻蒙
    +關注

    關注

    57

    文章

    2363

    瀏覽量

    42887
  • OpenHarmony
    +關注

    關注

    25

    文章

    3725

    瀏覽量

    16375
收藏 人收藏

    評論

    相關推薦

    Android、iOS鴻蒙平臺框架ArkUI-X

    在Android、iOS鴻蒙多個平臺上提供生動而流暢的用戶界面體驗。 一、配套關系 表1 版本軟件和平臺配套關系 目標平臺 項目編譯使用O
    的頭像 發(fā)表于 01-31 14:52 ?1802次閱讀
    <b class='flag-5'>跨</b>Android、<b class='flag-5'>iOS</b>、<b class='flag-5'>鴻蒙</b>多<b class='flag-5'>平臺</b>框架<b class='flag-5'>ArkUI-X</b>

    鴻蒙開發(fā)學習:初探【ArkUI-X

    **簡單來說,ArkTS + ArkUI-X 對標的框架為 flutter,一次代碼,編譯為 native 全平臺運行**
    的頭像 發(fā)表于 05-13 15:58 ?1050次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>學習:初探【<b class='flag-5'>ArkUI-X</b>】

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

    ACE Tools是一套為ArkUI-X項目平臺應用開發(fā)者提供的命令行工具,支持在Windows/Ubuntu/macOS平臺運行,用于構
    的頭像 發(fā)表于 05-21 17:39 ?1828次閱讀
    <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目錄結構介紹】

    本文檔配套ArkUI-X,將OpenHarmony ArkUI開發(fā)框架擴展到不同的OS平臺,比如Android和iOS
    的頭像 發(fā)表于 05-20 16:28 ?825次閱讀
    <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目錄結構介紹】

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

    本文介紹將ArkUI框架擴展到Android平臺所需要的必要的類及其使用說明開發(fā)者基于OpenHarmony,可復用大部分的應用代碼(生命周期等)并可以部署到Android
    的頭像 發(fā)表于 05-21 10:54 ?963次閱讀
    <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>)】

    鴻蒙開發(fā)ArkUI-X基礎知識:【ArkUI平臺設計總體說明

    本文檔描述ArkUI開發(fā)框架平臺運行能力相關的總體技術方案。
    的頭像 發(fā)表于 05-24 15:41 ?1565次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>ArkUI-X</b>基礎知識:【<b class='flag-5'>ArkUI</b><b class='flag-5'>跨</b><b class='flag-5'>平臺</b>設計總體<b class='flag-5'>說明</b>】

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

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

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

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

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

    OpenHarmony項目群技術指導委員會(以下簡稱“TSC”)-平臺應用開發(fā)框架TSG所孵化項目 —— ArkUI-X,近期已正式開源 ,開發(fā)
    的頭像 發(fā)表于 08-22 22:19 ?841次閱讀
    資訊速遞 | <b class='flag-5'>ArkUI-X</b> 預覽版已正式開源!

    鴻蒙平臺框架:【ArkUi-X】創(chuàng)建工程

    鴻蒙推出了鴻ArkUi-X 框架所以就寫個文章分享一下
    的頭像 發(fā)表于 05-13 17:48 ?976次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>跨</b><b class='flag-5'>平臺</b>框架:【<b class='flag-5'>ArkUi-X</b>】創(chuàng)建工程

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

    本文檔適用于ArkUI平臺應用開發(fā)的初學者。通過開發(fā)環(huán)境搭建、應用工程創(chuàng)建、編譯和運行,熟悉ArkUI
    的頭像 發(fā)表于 05-24 10:40 ?495次閱讀
    <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>準備】

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

    在DevEco Studio中導入ArkUI-X Sample,快速創(chuàng)建平臺工程。
    的頭像 發(fā)表于 05-17 15:54 ?669次閱讀
    <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>初體驗】

    鴻蒙ArkUI-X平臺開發(fā):【 應用工程結構說明

    本文檔配套ArkUI-X,將OpenHarmony ArkUI開發(fā)框架擴展到不同的OS平臺,比如Android和iOS
    的頭像 發(fā)表于 05-19 21:05 ?602次閱讀
    <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'>說明</b>】

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

    ArkUI-X支持動態(tài)化,使用者可以根據(jù)自己需要動態(tài)發(fā)布平臺內容,從而使平臺部分和宿主應用進行解耦。
    的頭像 發(fā)表于 05-23 14:38 ?904次閱讀
    <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'>平臺</b>差異化【Android、<b class='flag-5'>ios</b>動態(tài)化】

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

    本文檔適用于ArkUI-X框架開發(fā)的初學者。通過環(huán)境搭建、代碼下載、代碼編譯、API擴展和使用,快速了解平臺項目開發(fā)流程。
    的頭像 發(fā)表于 05-23 21:02 ?480次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b>框架<b class='flag-5'>開發(fā)</b>:【<b class='flag-5'>開發(fā)</b>準備】
    主站蜘蛛池模板: 天天在线影院| 亚欧有色亚欧乱色视频| 日韩黄色网| 日本美女黄网站| 九九久久九九久久| 午夜黄色网| 日韩一级生活片| 日本三级日产三级国产三级| 欧美人与动性视频在线观| 久久精品视频7| 国产精品入口免费视频| 在线观看免费高清| 日本黄色免费网址| 春宵福利网站| 天天躁夜夜躁狠狠躁2021西西| 99热精品一区| 性免费网站| 一级特级aaa毛片| 天堂在线观看视频| 最近2018年中文字幕在线| 亚洲国产丝袜精品一区杨幂| 日韩特级毛片| 黄 色 片免费观看| 在线视频影院| 国产精品网站在线进入| 性感美女逼| 四虎精品久久久久影院| 久久精品免费视频观看| 夜夜综合网| 国产精品莉莉欧美自在线线| 亚洲视频www| 午夜片 飘香香影院| 免费一级在线观看| 最近最新中文字幕6页| 国产小视频在线免费观看| 日本一区不卡视频| 免费在线一区二区三区| 四虎在线电影| 国产色中色| 久久99精品久久久久久秒播| 色视频在线观看完整免费版|