Hatena::ブログ(Diary)

Buddha-Over-Flow

この日記のはてなブックマーク数
 

2011-09-10 No architectures to compile エラーの対処法

[] No architectures to compile エラーの対処法



XCode4にしてからというもの、以前は正常に実行できていたプロジェクトが、

iPhoneシュミレータでの実行時に下記のエラーを吐くようになった。


No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=i386, VALID_ARCHS=armv7).


i386アーキテクチャの指定がないのが原因のようなので、

ビルド設定の [Valid Architectures] に [i386] を追記すると解決した。

[Architectures]のほうは変更しなくても問題ない模様。

2011-06-17 iOSプロジェクトをコピーによって作成する際の手順

[] iOSプロジェクトをコピーによって作成する際の手順



新規にiOSのXcodeプロジェクトを作る際に、いつも使うライブラリ等のインポート設定などが面倒で、

横着して以前のプロジェクトをコピーして使いたくなる場合がある。


しかしこの作業を適当に勘でやると、アプリ実行時に[Unknown Error]が出て起動できなくなり

ハマる場合がよくあるので、備忘のために下記に正確な手順を書いておく。


iOSプロジェクトのコピーによる作成の手順/ XCode3版

( OldAppをコピー元のプロジェクトとする / NewAppをコピー後の新プロジェクトとする )


  1. OldAppのXCodeプロジェクトフォルダを新しい場所にコピー
  2. コピーしたXCodeプロジェクトフォルダ名をNewAppに変更
  3. NewApp内のOldApp.xcodeprojファイル名をNewApp.xcodeprojに変更
  4. NewApp.xcodeprojをXCodeで開く
  5. グループパネルのTargetsの中のOldAppターゲット名を、NewAppに変更
  6. NewApp.targetを右クリックして情報パネルを開き、ビルド設定内の[Product Name]を、NewAppに変更
  7. Info.plist内の、[Bundle display name]/[Executable file]/[Bundle name]の値を、NewAppに変更
  8. クリーンしてビルドする

以上の手順で基本的には問題なくNewAppのアプリが立ち上がるはずだが、

それでも[Unknown Error]などが出る場合には、下記の点をよく確認する。


  • ビルド設定を変更する場合は、XCode上部メニューのProject/ビルド設定からではなく、目的のTargetの右クリックメニューから開くこと。 (Product Nameの値が違う場合がある)
  • Info.plist内の[Executable file]は、ビルド設定の[Product Name]と同じ名前にしなくてはいけない

それでも駄目なら下記に[Unknown Error]の様々な対処法が書いてあるので参考に。

”Unknown error”でiPhoneシュミレータが起動出来ないとき

2011-04-28 アプリ起動時にプログラム修正点が反映されないときのチェック事項

[] アプリ起動時にプログラム修正点が反映されないときのチェック事項


iPhoneプログラミングで、プログラムを変更し、起動し直したにも関わらず、

変更点が反映されていないことがある場合、考えられる原因は主に下記の2つ。


アプリのサスペンド機能がONになっている

iOS4.0以降から、ホームボタンでアプリを終了させた場合でも、

起動状態を維持する機能がデフォルトでONになるようになった。

これが悪さをしている場合があるので、info.plistに下記の設定を行い、この機能をOFFにしてみる。


<key>UIApplicationExitsOnSuspend</key>

<true/>


アプリのinfo.plistがターゲットのバンドルリソースに追加されている

info.plistの場所を変更し、再度プロジェクトに追加した場合などに、バンドルリソースに入ってしまうことがある。この場合、何故か2回目の起動時にもうひとつアプリがインストールされ、以前のアプリが立ち上がることがあるので削除する。

2011-04-27 ”Unknown error”でiPhoneシュミレータが起動出来ないとき

[] "Unknown error"でiPhoneシュミレータが起動出来ないとき


”Failed to launch simulated application: Unknown error.”


まれに上記のエラーが出て、iPhoneシュミレータがうんともすんとも言わなくなることがある。

何せ[Unknown error]なので、どうしようもないわけだけど、実際はいろいろな原因が考えられるようで。


今回の場合は、info.plistの[実行ファイル名]に、記号が入っていたのが原因だった。

[./\n\s]あたりの記号が入っていると上記エラーが起こる模様。

同様に、ターゲットのビルド設定の[プロダクト名]も、記号は受け付けない模様。

アプリケーションの表示名には使える記号も、使えない場合があるので注意。


その他の原因と解決方法はここにいろいろなレポートがある。

http://stackoverflow.com/questions/779115/iphone-failed-to-launch-simulated-application-unknown-error

基本的にinfo.plist/Prefix.pchやファイル/フォルダ名が原因のことが多いようだ。

2010-11-05 KORG - モノトロンの回路図公開

[][] KORG - モノトロンの回路図公開


f:id:miurror:20101105110420j:image

KORG Monotron


回路図が公開されてた。

モノトロンは改造だとかArduino的なオープンな方向に展開していてナカナカ興味深い。

2010-07-02 iPadでのYoutube最大化画面の制御

[] iPadでのYoutube最大化画面の制御



UIViewControllerを使いたくない主義のせいで、

Youtubeのフルスクリーンの制御で若干はまったのでメモ。


iPadではembedタグを利用することで、UIWebView内に普通にYoutubeプラグインを埋め込むことができる。


YoutubeをUIWebViewに埋め込むと、自動で再生ボタンや最大化ボタンが表示され、

最大化ボタンを押すと、勝手に最大化した画面を出してくれるし、

最小化ボタンを押すと、勝手に元の位置とサイズに戻してもくれるのだけれど、

自動で表示される最大化画面が、デバイスの回転に対応しなかったり位置がずれることがあった。


内部で実際にYoutubeを再生しているのはYoutubePluginという複合クラスのようなんだけど、

プライベートなクラスなので、容易には触れなかった。

Youtube再生画面内の最大化ボタンをタップした瞬間をフックできればいいのだけど、

それも上手くいかなかった。(UIWebView/YoutubePluginはタップのイベントを受け付けないので)


◇結論


デバイスの回転に対応するには


Youtubeを読み込むWebViewの親ビューのどこかでUIViewControllerを使う必要がある模様。

たとえばこんな感じで、「親ビューの階層内のどこか」でUIViewControllerを経由させる。


UIViewController *controller = [[UIViewController alloc] init];
controller.view = webParentView;
[self addSubview:[controller.view autorelease]];

WebViewの直近の親でControllerを使う必要はなくて、

むしろ後に最大化画面の位置とサイズを調整するためには、

なるべくUIWindowに近いところの親ビューをController経由にするほうがいい。


位置とサイズを調整するには


これはUIViewController経由でaddした「親ビューの」位置とサイズに従って追随する模様。

なのでUIDevice等から画面の回転イベントを受け取って、

Controllerを挟んだ親ビューの位置とサイズを調整すれば自動で追随してくれる。

2010-06-09

[] UIKeyboardのOrientationを指定する方法


UINavigationController等のコントローラーはなるべく使いたくない主義で、

画面の回転に対する処理をすべて自前で書いているような場合、下記の処理を書いておかないと、

UITextField等で自動でキーボードが表示される際に、Orientationが追随してくれない。



[[UIApplication sharedApplication] setStatusBarOrientation:orientation animated:NO];


UIKeyboardはステータスバーのOrientationによって表示する向きを変えている模様。

UIDeviceではないので注意。


今回はiPadのケースではまったんだけど、

iPhoneのときは普通に追随してたと思うんだけどなぁ...。

2010-05-14 XCode(iPhoneSDK)でLinkが上手くいかない場合の確認事項

[][] XCode(iPhoneSDK)でLinkが上手くいかない場合の確認事項


SQLiteライブラリのリンクの設定でちょっとはまったので備忘録に。


■Linkingのエラーが出たら、ビルド設定の【Library Search Path】を確認し、別のパスが優先で指定されていたらその値を削除する

( このとき検索窓を使って設定を探す場合は、Showのところを【All Settings】にしておかないと、

独自定義した値しか表示されず混乱するので注意 )


要はXCodeが勝手にPath設定を追記して、他の環境のライブラリを優先指定しているのが原因。


libxmlなど、別のフレームワークや環境等にも含まれるdylibを指定する場合、同様の問題が起こる可能性がある。


自分の場合は、XAMPPのほうのlibsqliteが優先で指定されていて、

iPhone実機で動作させる際にリンクエラーが出た。


ちなみに、シミュレータと実機ではそれぞれ別のdylibを呼ばないといけないが、

通常は自動でXCodeが切り替えてくれるところを、自前で切り替えたい場合は、

下記のパスを【Library Search Path】に指定すれば良い。


■シミュレータ:

/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.2.sdk/usr/lib


■実機:

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.2.sdk/usr/lib

2010-01-23

[][] iPhoneシュミレーターのカメラロール画像を取り出す



備忘録:シュミレーター内に保存された写真は下記の場所に保存されている。

/User/ユーザー名/Library/Application Support/iPone Simulator/SDKバージョン/Media/DCIM/100APPLE


以下のような感じで、アプリ画面のスクリーンショットを撮ったりすると、高解像度の画像が得られて便利。


#import <QuartzCore/CALayer.h>

- (void)getScreenShot {
	
    //現在のスクリーンショットを生成
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    UIGraphicsBeginImageContext(screenRect.size);
	
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [[UIColor blackColor] set];
    CGContextFillRect(ctx, screenRect);
    
    [self.layer renderInContext:ctx];
    
    NSData *pngData = UIImagePNGRepresentation(
                                 UIGraphicsGetImageFromCurrentImageContext());
    UIImage *retImage = [[UIImage imageWithData:pngData] retain];
	
    UIGraphicsEndImageContext();	
	
    //ローカルに保存
    UIImageWriteToSavedPhotosAlbum(retImage, 
                                   self,
                                   @selector(image:didFinishSavingWithError:contextInfo:), 
                                   nil);
	
}

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error 
                                            contextInfo:(void*)contextInfo {
	if (!error) {
             NSLog(@"Error %@", [error localizedDescription]);
	}
}

2009-06-20 英語podcastとか流行っているようなので、映画のシナリオサイトとか

[][] 英語podcastとか流行っているようなので、映画のシナリオサイトとかいろいろオススメしてみるよ!


f:id:miurror:20040927121500j:image


最近、英語のpodcastの話題や、「超字幕」の話題が人気のようなので、英語勉強に使えるサイトを僕もいくつか紹介してみようと思います。映画の話は最後に。


まず僕が英語のpodcastを探すのに使っているのはこれです。

Podcast検索サイト 「DigitalPodcast

世界中のpodcastのリンク集です。様々な話題ごとに整理されているので、興味のある分野のpodcastを片っ端から登録してみるとかなりいいんじゃないでしょうか。TechnologyとかArtとかいいですね。どうせ聞くなら自分の専門分野の英語のほうが楽しいに決まっていますね。その場で聴けるのもいいです。


次におすすめしたいのはこれです。

言語交換SNS 「Lang-8

LanguageExchangeと呼ばれる活動を支援するためのSNSです。LangageExchangeは、自分が習いたい言語をネイティブの人に教えてもらう代わりに、自分も他の人に母国語を教えてあげるという活動です。

このサイト上では、学習中の言語でMIXIのように日記をつけることができ、その記事を他のネイティブのユーザが添削してくれます。その代わり自分も自分の母国語で書かれた他の人の日記を添削してあげましょう。

母語が日本語で英語を習いたいようなケースでは、このサイトは楽しめるんじゃないかと思います。日本語を習いたい外国人はいっぱいいますし、英語を母国語とする人は当然多いので。

案外おもしろいのは、他の人の日本語の添削です。こっちはネイティブスピーカーなので、微妙なニュアンスの間違いも手に取るように分かり、外国語で日記が上手く書けなくてその難しさに落ち込んだときも、「難しいのはお互い様なんだ」と思えます。 

また外国人が間違えやすい日本語の表現なんかも分かって、外国人がなんだかkawaiiく見えるし、逆にものすごく高尚な日本語を使いこなしている人もいて、とても勉強になります。

(余談ですが、このサイトにも「Functional Programming / Haskell」のグループがあったのには笑いました。全然活動してないけど。)


次は英語の雑誌が読めるサイト。

洋雑誌シェアサイト 「Mygazines

洋雑誌をシェアできるサイトです。少し前に物議をかもしていたんですが、いちおう事件は解決したようですね。ここではいろんな洋雑誌の記事をWEB上で読むことが出来ます。

以前は有名な雑誌がかなりあって(Wiredとか)、英語の雑誌を日本に輸入していた洋販が潰れて困っていた身としては助かっていたんですが、訴えられてからはずいぶん内容が寂しくなってしまいました。

それでも生の紙面が検索できて手軽に見れるのはいいですね。洋雑誌は広告がすごく勉強になると思うのでおすすめです。


で、いよいよ映画の話。

映画のシナリオデータベース 「IMSDB

ここはすごいです。有名映画からマイナー映画まで、いろんな洋画のスクリプト(台本)が検索できます。しかもその場で全文読めます。

映画の台詞なので気障っぽかったり大袈裟だったり汚すぎたり、当然日常では使えない表現も多いですが、そんなことより、「憧れの映画のあの台詞が英語で読める/言えるようになる俺かっこいい!」というのが正しい使い方です。

たとえば僕の大好きなタランティーノPulpFiction台本。スラングばりばりですさまじい内容の映画なんですが、今見るととんでもなく豪華な俳優陣のドタバタ群像劇でカコイイです。ビンセントとジュールスのあのクールな台詞も読めます。


VINCENT

Well, in Amsterdam, you can buy beer

in a movie theatre. And I don't mean

in a paper cup either. They give you

a glass of beer, like in a bar. In

Paris, you can buy beer at

MacDonald's. Also, you know what

they call a Quarter Pounder with

Cheese in Paris?


JULES

They don't call it a Quarter Pounder

with Cheese?


VINCENT

No, they got the metric system there,

they wouldn't know what the fuck a

Quarter Pounder is.


JULES

What'd they call it?


VINCENT

Royale with Cheese.


JULES

(repeating)

Royale with Cheese. What'd they call

a Big Mac?


VINCENT

Big Mac's a Big Mac, but they call

it Le Big Mac.


JULES

Le Big Mac. What do they call a

Whopper?


VINCENT

I dunno, I didn't go into a Burger

King. But you know what they put on

french fries in Holland instead of

ketchup?


JULES

What?


VINCENT

Mayonnaise.


JULES

Goddamn!


VINCENT

I seen 'em do it. And I don't mean a

little bit on the side of the plate,

they fuckin' drown 'em in it.


JULES

Uuccch!


やっぱ最高ですねこの二人!

台本読むだけで二人の会話が脳内再生されてニンマリしてしまいます。 (クォーターパウンダーやワッパーも今なら日本でも食べれるしね)

他にも「レザボアドッックス」とか「時計仕掛けのオレンジ」とか 「トレインスポッティング」なんかも下品でいいんじゃないでしょうか!

で、ここからが大事なんですが、英語のスクリプトだけだとどうしても意味がわからない表現が出てきます。DVDの日本語字幕と読み比べたとしても、具体的にどの部分が慣用句なのかとかがさっぱりな時があります。それに話を覚えているのに毎回DVD見るのも面倒くさい。

そこで超字幕もいいですが、安くあげたい人におすすめなのが、洋画のスクリプト対訳本です

これの良いところは、台詞の横に慣用句とか難しいスラングの解説が出ているところと、大きい図書館なら大体有名どころが何冊か置いてあるというところです。

たとえば東京都図書館横断検索で「スクリーンプレイ」で調べると、結構ありますね。

なので近くの図書館で試しに借りて読んでみると、楽しい休日が過ごせるんじゃないかと思います。マジおすすめ。アマゾンでも中古だとものすごく安いので、欲しいのが見つかれば買っでもいいかもですね。


以上、パルプフィクション紹介したかっただけなんですが、なんとなく英語勉強に使えるサイトを紹介してみました。今Amazon見たら「ウォール街」も対訳本ありますね。いいかも。