女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

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

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

通過Stage模型開發iOS端應用指南

簡介

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

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

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

StageViewController

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

公共屬性

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

初始化方法

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

StageApplication

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

公共方法

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

AppDelegate內關鍵實現參考

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應用實現頁面跳轉

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

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

    // 根據規則截取URL相應參數
    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得到的參數,映射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];
    
    // 根據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應用進入后臺,觸發對應生命周期事件。
- (void)applicationDidEnterBackground:(UIApplication *)application {
    [StageApplication callCurrentAbilityOnBackground];
}
  • ArkUI應用進入前臺,觸發對應生命周期事件。
- (void)applicationWillEnterForeground:(UIApplication *)application {
    [StageApplication callCurrentAbilityOnForeground];
}
  • 終止ArkUI應用程序進程。
- (void)applicationWillTerminate:(UIApplication *)application {
    [StageApplication releaseViewControllers];
}

具體方法使用參考samples示例

Ability與ViewController對應規則

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

iOS端應用內的viewController的viewControllerName組成規則:Ability的moduleName + Ability的abilityName + “viewController”。

stage_iOS

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

在didFinishLaunchingWithOptions函數中進行初始化

- (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回調函數中進行初始化

- (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

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

    關注

    114

    文章

    16960

    瀏覽量

    182876
  • 鴻蒙
    +關注

    關注

    59

    文章

    2507

    瀏覽量

    43765
  • OpenHarmony
    +關注

    關注

    26

    文章

    3823

    瀏覽量

    18128
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    鴻蒙開發學習:初探【ArkUI-X

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

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

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

    鴻蒙ArkUI-X平臺開發:【SDK目錄結構介紹】

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

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

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

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

    本文檔描述ArkUI開發框架平臺運行能力相關的總體技術方案。
    的頭像 發表于 05-24 15:41 ?2047次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</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開發指南:【SDK配置和構建說明

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

    ArkUI-X平臺框架接入指南

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

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

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

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

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

    鴻蒙平臺框架:【ArkUi-X】創建工程

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

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

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

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

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

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

    本文檔配套ArkUI-X,將OpenHarmony ArkUI開發框架擴展到不同的OS平臺,比如Android和iOS
    的頭像 發表于 05-19 21:05 ?852次閱讀
    <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>:【 應用工程結構<b class='flag-5'>說明</b>】

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

    ArkUI-X支持動態化,使用者可以根據自己需要動態發布平臺內容,從而使平臺部分和宿主應用進行解耦。
    的頭像 發表于 05-23 14:38 ?1367次閱讀
    <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>動態化】

    鴻蒙ArkUI-X框架開發:【開發準備】

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