Ad
9: 2018-01-10 (水) 17:04:56 njf ソース バックアップ No.9 を復元して編集 現: 2018-05-28 (月) 15:20:05 njf ソース 編集
Line 1: Line 1:
 +[[iOSでのANEの作成]]に戻る
 +
ANEを作成するためには、iOS側のプログラムをまとめたスタティックライブラリ(.aファイル)が必要となります。その制作方法やテストの仕方をこちらでご紹介します。 ANEを作成するためには、iOS側のプログラムをまとめたスタティックライブラリ(.aファイル)が必要となります。その制作方法やテストの仕方をこちらでご紹介します。
Line 12: Line 14:
&ref(newProject.jpg,mw:480,mh:360);クリックで拡大 &ref(newProject.jpg,mw:480,mh:360);クリックで拡大
-プロジェクト名などを指定します。ここでは「AneAlertSample」としています。Langageは「Objective-C」です。他の言語でもANEが作れるかも知れませんが、資料が一番多いObjective-Cが一番無難です。Teamの所には登録済みの開発者アカウントを入れておきましょう。+プロジェクト名などを指定します。ここでは「AneAlertSample」としています。Langageは「Objective-C」です。他の言語でもANEが作れるかも知れませんが、資料が一番多いObjective-Cが一番無難です。Objective-C忘れた、という方はこちら「[[iOS/Objective-C/チートシート]]」をどうぞ。Teamの所には登録済みの開発者アカウントを入れておきましょう。
&ref(newProjectSetting.jpg,mw:480,mh:360);クリックで拡大 &ref(newProjectSetting.jpg,mw:480,mh:360);クリックで拡大
Line 36: Line 38:
ANEの作成はけっこう面倒です。それを何度もやらなくてすむように、iOS上でテストはできるだけ行ってから、ANEの作成にうつった方が効率的です。そのためのテスト用ボタンを設置します。 ANEの作成はけっこう面倒です。それを何度もやらなくてすむように、iOS上でテストはできるだけ行ってから、ANEの作成にうつった方が効率的です。そのためのテスト用ボタンを設置します。
-Xcodeでプロジェクトを作成すると、デフォルトでは「Safe area」というレイアウトを利用しています。しかし、Build TargetをiOS8にしていると、「Safe area」はiOS9からなので、エラーが発生します。プロジェクトを開いただけなら問題ないように見えますが、実行しようとしたり、「Main.storyboard」を表示しようとすると以下のようなエラーが出ます。+Xcodeでプロジェクトを作成すると、デフォルトでは「Safe area」というレイアウトを利用しています。しかし、Build TargetをiOS8にしていると、「Safe area」はiOS9からなので、エラーが発生します。プロジェクトを開いただけなら問題ないように見えますが、実行しようとしたり、「Main.storyboard」や「LaunchScreen.storyboard」を表示しようとすると以下のようなエラーが出ます。
&ref(safeAreaError.jpg,mw:480,mh:360);クリックして拡大 &ref(safeAreaError.jpg,mw:480,mh:360);クリックして拡大
-テスト用のアプリでは、特に「Safe area」は利用しないので削除します。+iOS9にすればこのエラーは防げます。 
 + 
 +もしiOS8のままで開発するなら、特に「Safe area」は利用しないので削除します。
そのために、まず「Main.storyboard」の「Safe Area」を選択します。 そのために、まず「Main.storyboard」の「Safe Area」を選択します。
Line 54: Line 58:
&ref(safeAreaCheck.jpg,mw:480,mh:360);クリックして拡大 &ref(safeAreaCheck.jpg,mw:480,mh:360);クリックして拡大
-ファイルの同期がうまくいっていないのか、実際にビルドするとなぜかまたこのエラーが出ることがありますが、上記の手順を繰り返すとたいてい消えます。+「LaunchScreen.storyboard」の方も同様にして「Safe Area」を消してください。
次にテスト用のボタンを配置します。Xcode右下の部分の丸いアイコンのタブをクリックし、スクロールするとボタンがあります。 次にテスト用のボタンを配置します。Xcode右下の部分の丸いアイコンのタブをクリックし、スクロールするとボタンがあります。
Line 74: Line 78:
次にボタンを押したときの処理を定義します。 次にボタンを押したときの処理を定義します。
Xcodeのウインドウの右上にある丸いボタンを押して、StoryboardとViewController.mを両方表示します。 Xcodeのウインドウの右上にある丸いボタンを押して、StoryboardとViewController.mを両方表示します。
 +ViewController.mが表示されない場合は、エディタ上の「< >」とか書いてある右側の部分をクリックしてManualにしてViewController.mを選択したり「< >」をクリックしたりすると切り替わります。
&ref(twoEditorBtn.jpg,mw:480,mh:360); &ref(twoEditorBtn.jpg,mw:480,mh:360);
Line 84: Line 89:
Nameを「alertShowUp」とすると、その名前のメソッドがドラッグ&ドロップした場所に自動で挿入されます。 Nameを「alertShowUp」とすると、その名前のメソッドがドラッグ&ドロップした場所に自動で挿入されます。
このメソッドがボタンが押されたとき(正確には押して離したとき)に呼び出されます。 このメソッドがボタンが押されたとき(正確には押して離したとき)に呼び出されます。
 +たまに「Could not insert なんとか」というエラーが出るときがありますが、Xcodeのキャッシュの問題らしいです。Xcodeを再起動するとうまくいったりします。
動作確認のために、このメソッドにログ出力の処理を追加します。 動作確認のために、このメソッドにログ出力の処理を追加します。
Line 99: Line 105:
*ANE用のライブラリの作成 [#f803ea57] *ANE用のライブラリの作成 [#f803ea57]
このページの目的は作成したボタンを押すとアラート画面が表示されるようなテスト用アプリを作り、かつANE用のライブラリを作ることです。 このページの目的は作成したボタンを押すとアラート画面が表示されるようなテスト用アプリを作り、かつANE用のライブラリを作ることです。
-このままこのプロジェクトに処理を書くこともできますが、そうするとあとでライブラリ製作用のプロジェクトを作って内容をコピーしなくてはいけなくなるため、面倒です。+このままこのテスト用アプリのプロジェクトに処理を書くこともできますが、そうするとあとでライブラリ製作用のプロジェクトを作って内容をコピーしなくてはいけなくなるため、面倒です。
はじめからライブラリ用のプロジェクトを制作し、それを先ほど制作したテスト用のプロジェクトにリンクさせた方が簡単です。 はじめからライブラリ用のプロジェクトを制作し、それを先ほど制作したテスト用のプロジェクトにリンクさせた方が簡単です。
そのためにここでライブラリ用のプロジェクトを制作します。 そのためにここでライブラリ用のプロジェクトを制作します。
Line 153: Line 159:
     if(alertController == nil){      if(alertController == nil){
         NSLog(@"alertWindowInit");          NSLog(@"alertWindowInit");
 + 
         alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert];          alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert];
 + 
         // Yes button          // Yes button
         [alertController addAction:[UIAlertAction actionWithTitle:@"Yes" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {          [alertController addAction:[UIAlertAction actionWithTitle:@"Yes" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
Line 161: Line 167:
         }]];          }]];
     }      }
 + 
 }  }
 - (void) alertWindowShow:(NSString*)title : (NSString*)message{  - (void) alertWindowShow:(NSString*)title : (NSString*)message{
Line 178: Line 184:
これに対応するanealert.hは以下の通りです。 これに対応するanealert.hは以下の通りです。
 #import <UIKit/UIKit.h>  #import <UIKit/UIKit.h>
 + 
 @interface AneAlert : NSObject{  @interface AneAlert : NSObject{
 @private  @private
Line 186: Line 192:
 - (void) alertWindowInit;  - (void) alertWindowInit;
 - (void) alertWindowShow:(NSString*)title : (NSString*)message;  - (void) alertWindowShow:(NSString*)title : (NSString*)message;
 + 
 @end  @end
Line 205: Line 211:
     [aneAlert alertWindowShow:@"Ane Test from objective-C" : message];      [aneAlert alertWindowShow:@"Ane Test from objective-C" : message];
     cnt++;      cnt++;
 + 
 }  }
Line 215: Line 221:
     int cnt;      int cnt;
 }  }
 + 
 @end  @end
Line 259: Line 265:
 #import "FlashRuntimeExtensions.h"  #import "FlashRuntimeExtensions.h"
 #import "anealert.h"  #import "anealert.h"
 + 
 AneAlert * aneAlert;  AneAlert * aneAlert;
 + 
 FREObject ANEAlertShow(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]){  FREObject ANEAlertShow(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]){
     NSLog(@"ANEAlertShow start");      NSLog(@"ANEAlertShow start");
     uint32_t argLength; //引数の長さ      uint32_t argLength; //引数の長さ
     const uint8_t *argBuff; //引数の値保持用      const uint8_t *argBuff; //引数の値保持用
 + 
     FREGetObjectAsUTF8(argv[0], &argLength, &argBuff);//引数取得      FREGetObjectAsUTF8(argv[0], &argLength, &argBuff);//引数取得
     NSString *arg1NSString = [NSString stringWithUTF8String:(char*)argBuff];//引数をNSStringへ変換      NSString *arg1NSString = [NSString stringWithUTF8String:(char*)argBuff];//引数をNSStringへ変換
 + 
     FREGetObjectAsUTF8(argv[1], &argLength, &argBuff);//引数取得      FREGetObjectAsUTF8(argv[1], &argLength, &argBuff);//引数取得
     NSString *arg2NSString = [NSString stringWithUTF8String:(char*)argBuff];//引数をNSStringへ変換      NSString *arg2NSString = [NSString stringWithUTF8String:(char*)argBuff];//引数をNSStringへ変換
 + 
     if(aneAlert == nil){      if(aneAlert == nil){
         NSLog(@"ANEAlertShow:init alert!");          NSLog(@"ANEAlertShow:init alert!");
Line 282: Line 288:
     return NULL;      return NULL;
 }  }
 + 
 void ANEAlertContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet)  void ANEAlertContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet)
 {  {
     NSLog(@"ANEAlertContextInitializer start");      NSLog(@"ANEAlertContextInitializer start");
 + 
     *numFunctionsToTest = 1;      *numFunctionsToTest = 1;
 + 
     FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * *numFunctionsToTest);      FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * *numFunctionsToTest);
 + 
     func[0].name = (const uint8_t*) "alert";      func[0].name = (const uint8_t*) "alert";
     func[0].functionData = NULL;      func[0].functionData = NULL;
     func[0].function = &ANEAlertShow;      func[0].function = &ANEAlertShow;
 + 
     *functionsToSet = func;      *functionsToSet = func;
 + 
     NSLog(@"ANEAlertContextInitializer end");      NSLog(@"ANEAlertContextInitializer end");
 }  }
 + 
 void ANEAlertInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet){  void ANEAlertInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet){
     NSLog(@"ANEAlertInitializer start");      NSLog(@"ANEAlertInitializer start");
Line 347: Line 353:
以上でライブラリの作成は終わりです。 以上でライブラリの作成は終わりです。
 +
 +[[iOSでのANEの作成/swcの作成]]に進む
 +
 +[[iOSでのANEの作成]]に戻る


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 2543, today: 4, yesterday: 0
MenuBar
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失

Portuguese | English | German | Greek | Japanese | Korean | Russian | T-Chinese top
NJF