記事ディレクトリ
I.はじめに
クロスプラットフォームAPPの開発過程でuni-app
、ビデオ再生のための小ウィンドウ機能がサポートされていないことが判明し、プラグインマーケットが提供するプラグインのユーザーエクスペリエンスが良くないことが判明したため、開発することになりました。それ自体はネイティブuni-app
プラグインです。
uni-app
ネイティブ プラグインとは、ネイティブに開発された機能を仕様に従ってプラグイン パッケージにカプセル化し、uni-app
フロントエンド プロジェクトで呼び出すことによって開発されたネイティブ機能を指します。js
ネイティブ開発環境の構築手順についてはiOS
、ブログ投稿「高度なクロスプラットフォームアプリケーション開発 (27) iOS ネイティブ開発環境の構築手順の詳細」を参照してください。
2. 知識の蓄え
現在、iOS には 2 つの人気のある開発言語があります:Objective-C
とSwift
。Objective-C
オブジェクト指向言語であり、非常に実用的な言語です。C (C++) 言語の基礎を持っている人にとっては、簡単に始めることができます。後者は、Swift
iOS/Mac の将来の開発の主要な言語であり、プログラミングのアイデアと API の作成の点で非常に優れています。
-
開発ツール:
Xcode
Xcode
iOS 開発に不可欠なツールであり、Apple の Mac オペレーティング システムで動作し、Mac OS X および iOS アプリケーションを開発するために Apple が開発者に提供する統合開発環境です。Xcode は統一されたユーザー インターフェイス設計を採用しており、コーディング、テスト、デバッグがすべてシンプルなウィンドウ内で完了します。もちろん も使えますAPPcode
。 -
クラス ライブラリ管理ツール:
CocoaPods
CocoaPods
これは、iOS で最も一般的に使用され、よく知られているクラス ライブラリ管理ツールです。このツールを使用すると、「 」と呼ばれる依存ライブラリをCocoaPods
プロジェクトに追加でき (これらのクラス ライブラリはそれ自体でサポートされている必要があります)、それらのライブラリを簡単に管理できます。バージョン。Pods
CocoaPods
三、 Object-C
一方、uni-app
ネイティブ プラグインはObject-C
を使用して実装されます。したがって、後続の開発言語はObject-C
主に に基づいてい。
Objective-C
名前が示すように、標準の ANSI C 言語を拡張して、メッセージ パッシングとオブジェクト指向プログラミングを導入します。(以下のデフォルトにはすでに C/C++ 言語基盤が含まれています)
構文の概要:
-
パッケージ名 (名前空間) の概念はありません。 では
Java
、同じクラス名を持つ 2 つのクラスが競合するのを防ぐために、これら 2 つのクラスを異なるパッケージに配置できます。OC には「パッケージ」という概念がありません。つまり、名前空間メカニズムがありません。代わりに、開発者はクラス名にプレフィックスを追加します。プレフィックスを使用すると、クラス名の競合を効果的に防ぐことができます。たとえばNSString
、(OC の文字列クラス)、NSArray
(OC の配列クラス)、それらのプレフィックスはすべて NS です。 -
キーワードはすべて
@
次で始まります。OC コードは C 言語および C++ コードと混合できます。C 言語と C++ はプログラミング言語として独自のキーワードを持っています。C 言語および C++ キーワードとの競合を防ぐために、すべての OC キーワードは で始まります@
。@
文字列でも、たとえば@“Hello"
OC では文字列で始まり、C 言語では「Hello」が文字列です。
文法のポイント:
-
oc ガベージコレクションはありません。
-
ソース ファイルのサフィックスは です
.m
; エントリ プログラムは c と同じですmain()
。 -
インポートパッケージを使用する場合、
#import
ヘッダーファイルを追加するために条件付きコンパイルを行う必要はなく、#import
ヘッダーファイルが追加されたかどうかを自動的に判断します。 -
.h ファイル: ヘッダー ファイル、つまりクラスの宣言ファイル。メンバー変数とメソッドを宣言するために使用されます。クラス宣言では、キーワード
@interface
と を使用します@end
。注:
.h
のメソッドは単なる宣言であり、メソッドの実装ではありません。つまり、メソッド名、メソッドの戻り値の型、メソッドが受け取るパラメータの型を説明するだけで、メソッド内のコードは書きません。 -
.m ファイル: クラスの実装ファイル。実装で宣言されたメソッドのコードを
Objective-C
含めることができます。クラスの実装では、キーワードと を使用します。.mm ファイル:ソース コード ファイル。 とコードを含めることができます。機能を使用する必要がある場合にのみ使用してください。C
.h
@implementation
@end
Objective-C
C
C++
C++
-
ヘッダー ファイル参照: 使用できることに加えて
#include
、同じヘッダー ファイルが 1 回だけインクルードされるようにするための、Objective-C
より優れたディレクティブが提供されています(推奨)。#import
-
メッセージ パッシング:メッセージ パッシング スタイル
Objective-C
のオブジェクト指向構文は、そこから派生したものです。Smalltalk
オブジェクト指向言語のオブジェクト呼び出しとは異なりc++
、オブジェクト間でメッセージを渡すという考えを採用しており、本質的に動的バインディングが可能であり、未知のメッセージを渡すことができます (コンパイラーはエラーを報告しません)。実行時まで処理されます。逆に、C++
コンパイル時に対応するメソッドがあるかどうかをチェックし、存在しない場合はエラーを報告します。さらに、Objective-C
空のオブジェクトにメッセージを送信することもできます。デフォルトでは何も行わないため、プログラムのクラッシュを心配する必要がなく、より堅牢です。
サンプルコードは次のとおりです。
#import "TestModule.h"
@implementation TestModule
// 通过宏 UNI_EXPORT_METHOD 将异步方法暴露给 js 端
UNI_EXPORT_METHOD(@selector(testAsyncFunc:callback:))
/// 异步方法(注:异步方法会在主线程(UI线程)执行)
/// @param options js 端调用方法时传递的参数
/// @param callback 回调方法,回传参数给 js 端
- (void)testAsyncFunc:(NSDictionary *)options callback:(UniModuleKeepAliveCallback)callback {
// options 为 js 端调用此方法时传递的参数
NSLog(@"%@",options);
// 可以在该方法中实现原生能力,然后通过 callback 回调到 js
// 回调方法,传递参数给 js 端 注:只支持返回 String 或 NSDictionary (map) 类型
if (callback) {
// 第一个参数为回传给js端的数据,第二个参数为标识,表示该回调方法是否支持多次调用,如果原生端需要多次回调js端则第二个参数传 YES;
callback(@"success",NO);
}
}
// 通过宏 UNI_EXPORT_METHOD_SYNC 将同步方法暴露给 js 端
UNI_EXPORT_METHOD_SYNC(@selector(testSyncFunc:))
/// 同步方法(注:同步方法会在 js 线程执行)
/// @param options js 端调用方法时传递的参数
- (NSString *)testSyncFunc:(NSDictionary *)options {
// options 为 js 端调用此方法时传递的参数
NSLog(@"%@",options);
/*
可以在该方法中实现原生功能,然后直接通过 return 返回参数给 js
*/
// 同步返回参数给 js 端 注:只支持返回 String 或 NSDictionary (map) 类型
return @"success";
}
@end
4. 起動処理
main
機能は次のとおりです。
// 程序启动时执 main函数,在main函数当中有以下操作.
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
//第三个参数:UIApplication类名或者子类的名称 nil == @"UIApplication"
//第四个参数:UIApplication的代理的代理名称
//NSStringFromClass:把类名转化字符串
//NSStringFromClass好处:1.有提示功能 2.避免输入错误
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
完全なプログラム起動プロセス:
- を実行します
Main
。UIApplicationMain
関数を実行します。UIApplication
オブジェクトを作成し、UIApplicationMain
オブジェクトのプロキシを設定します。UIApplication
3 番目のパラメータはUIApplication
名前で、指定した場合はデフォルトで にnil
なります。4番目のパラメータはエージェントです。UIApplication
UIApplication
UIApplication
- アプリケーションが終了しないようにメイン実行ループを開始します。
info.plist
設定ファイルをロードします。ファイル内に指定されたファイルがinfo.plist
あるかどうかを判断し、存在する場合はファイルをロードし、存在しない場合はアプリケーションをロードします。Main storyboard file base name
storyboard
info.plist