【iOS/Objective-c】Method Swizzling 修正版

ちょっと前にこんなん書きましたシリーズ第二弾

【iOS/Objective-c】Method Swizzling - ふるすたっくえんじにあっぽい人の日記

いや、動くんだけどさ。
[[Hoge sharedInstance] applicationWillResignActive:application];
って呼ぶと、AppDelegate内で定義されているapplicationWillResignActive内の処理が実行されるんすけどね。こんなかでselfは当然AppDelegateのインスタンスは参照してないんすよね。Hogeインスタンス参照してるわ。そらそうだ。

で、以下のように修正


#pragma mark - swizzled AppDelegate Methods
- (void)applicationWillResignActive:(UIApplication *)application {
    [[Hoge sharedInstance] swizzleMethod:@selector(applicationWillResignActive:)];
    [self applicationWillResignActive:application];
    [[Hoge sharedInstance] swizzleMethod:@selector(applicationWillResignActive:)];
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    [[Hoge sharedInstance] swizzleMethod:@selector(applicationDidEnterBackground:)];
    [self applicationDidEnterBackground:application];
    [[Hoge sharedInstance] swizzleMethod:@selector(applicationDidEnterBackground:)];
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    [[Hoge sharedInstance] swizzleMethod:@selector(applicationWillEnterForeground:)];
    [self applicationWillEnterForeground:application];
    [[Hoge sharedInstance] swizzleMethod:@selector(applicationWillEnterForeground:)];
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [[Hoge sharedInstance] swizzleMethod:@selector(applicationDidBecomeActive:)];
    [self applicationDidBecomeActive:application];
    [[Hoge sharedInstance] swizzleMethod:@selector(applicationDidBecomeActive:)];
}

- (void)applicationWillTerminate:(UIApplication *)application {
    [[Hoge sharedInstance] swizzleMethod:@selector(applicationWillTerminate:)];
    [self applicationWillTerminate:application];
    [[Hoge sharedInstance] swizzleMethod:@selector(applicationWillTerminate:)];
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    [[Hoge sharedInstance] swizzleMethod:@selector(application:didReceiveRemoteNotification:)];
    [self application:application didReceiveRemoteNotification:userInfo];
    [[Hoge sharedInstance] swizzleMethod:@selector(application:didReceiveRemoteNotification:)];
}




【iOS】UIWebViewで表示されている要素の高さを取得 バージョン2

ちょっと前にこんなん書きました。


【iOS】UIWebViewで表示されている要素の高さを取得 - ふるすたっくえんじにあっぽい人の日記

だがしかし。なんかびみょーにずれる。いや、divの高さは正しく取れてるんだけどさ。
WebViewの描画領域のサイズ取りたいだけなら、以下で十分w

webView.scrollView.contentSize




【Git】.gitignoreの書き方~Unity編

はい、ここを参考にしました。
オフィシャルなやつですからね。間違ってるはずがありませんね。

http://docs.unity3d.com/Manual/ExternalVersionControlSystemSupport.html
Unity - Manual: Using External Version Control Systems with Unity



こんな感じ

Temp
Obj
UnityGenerated
Library

次回.gitignoreの書き方にはいよいよCocos2d-xさんが登場する予定でございます。

なお、このエントリで記念すべき100エントリ目!
とりあえずfacebookに投稿しても、流入の98%は検索であんま意味ないからそろそろやめよう。




【その他】Duet Display買ったった

不具合多い
iOS側がiOS7だとあんまちゃんと動かなかった
まぁ今後に期待ですが、サブディスプレイとして映すだけならiOS8でリフレッシュレート落とせばそこそこ快適



ちっちゃいiPadに映せるって便利
ってゆかこのアプリが申請通ったのがすごい
なお、現在1500円になってました。


Duet Display - Ex-Apple Engineers Turn Your iPad Into An Extra Display



【iOS】UIWebViewで表示されている要素の高さを取得

2014/12/27
追記しました↓

【iOS】UIWebViewで表示されている要素の高さを取得 バージョン2 - ふるすたっくえんじにあっぽい人の日記



ひさびさiOS
うん、一応iOSもまだやってます。

動的に変えたいじゃん?webViewのサイズ。
とりあえずこんなhtml


<!DOCTYPE html>
<html>
<head>
<title>aaaaa</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<meta name="viewport" content="user-scalable=no;">
<link rel="stylesheet" type="text/css" href="../css/hoge.css" media="all">
</head>
<body>
<div id="contents">
あーぁ、だりー
</div>
</body>
</html>



取得したい要素にid振っとくのがポイントですねー
んでもって、こう。

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSString *heightStr = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"contents\").clientHeight;"];
    if (![NSString isNilOrEmpty:heightStr])
        webView.height = [heightStr floatValue];
}

ただ単にObjective-cからJavascript使えるよーってだけですね。


【Android】AndroidのGCはわりと働かない

どーも、Androidエンジニアです。
ちょっと楽しくなってきたよ。
やっぱAndroidうざいけど。
木曜日はCardViewに勝手にMarginが挿入される"仕様"に軽く4時間ハマり。
Padding/Marginを0にしても余白できるんだぜ!仕様らしいぜ!嫌ならCard View使うなってstackoverflowさんに書いてあったよ!
まぁその後無事解決しそうです。はい。useCompatPaddingが鍵を握っているようだ。
日本語の情報なかったからここに書いとく!
そもそもレイアウトxmlで設定したlayout_width/layout_heightが削除されるという謎の仕様?不具合?に悩まされたのに!


そして今日はGCに軽く3時間ハマり。
iOSだとさーすぐdealloc呼ばれて、メモリ使用量下がってくれるんだけどさ。

開発の仕上げにメモリリークしてないか確認してたんすよ。
したらさーメモリ使用量がズンズンズンズン増えてくからさーこれあかんと思って調査すること3時間。
結論:Androidだとちょっと使ったくらいじゃGCちゃん動いてくれないんね。ズンズン増えてくメモリ使用量見てたら、そのうちちゃんと解放されてましたw
なお、ちゃんとMemory Analyzer Toolを使ってGC動かせばわかったってゆーね。アプリ入れたくないんだもん。Android StudioのPlugin出たら入れよう。

無駄に時間食ったおかげで、この時間からCTO業に勤しみます。。



あと、このブログあからさまに土日はアクセス数が落ちるのなんとかしてくださいw
みんな検索から来てソース見て帰るらしいよ!
だからAdsense貼ることにしたんだよ!踏んでって!


【Android】Android File Transfer 自動起動させないように

MacAndroid端末とデータやりとりするのにAndroid File Transferを使いますね。
いや、adb使えばいいんだけどさ。
GUIでさくっとやるには以下のものアプリが必要ですと。
Windowsだったら普通にSDカードマウントしてくれんのに。
これだからMacは。

Android File Transfer


んで、こいつが困ったことにAndroid端末を接続すると勝手にアプリ起動しやがる。
で、自動起動させないように設定。

以下の二つのファイルを削除
/Applications/Android File Transfer.app/Contents/Resources/Android File Transfer Agent.app
${HOME}/Library/Application Support/Google/Android File Transfer/Android File Transfer Agent.app

以上。