タイトル通り、Sleipnizerで使っているPull-To-Gestureの部分のコードをgithubで公開しました。特徴はSleipnizerで使えるように4方向に対応している事です。branchのsleipnizerがまさに使ってる状態です。
https://github.com/r-plus/AllAroundPullView使い方の詳細はgithubのREADMEを参照。
chpwnのPullToRefreshViewを元に以下な感じの代物です。
タイトル通り、Sleipnizerで使っているPull-To-Gestureの部分のコードをgithubで公開しました。特徴はSleipnizerで使えるように4方向に対応している事です。branchのsleipnizerがまさに使ってる状態です。
https://github.com/r-plus/AllAroundPullView使い方の詳細はgithubのREADMEを参照。
chpwnのPullToRefreshViewを元に以下な感じの代物です。
iOSのバージョンを判定するのには二通り程あって、UIDeviceから取得する方法
float iOSVersion = [[[UIDevice currentDevice] systemVersion] floatValue];と、kCFCoreFoundationVersionNumberを使うやり方があります。
kCFCoreFoundationVersionNumber >= 550.52 //550.52はiOS 4.2の値
ちなみにfloatValue使うと小数点2個は取れないので5.1.1は5.100000になります。kCFCoreFoundationVersionNumberも3項目のバージョンでの値に変更はないため、3項目までちゃんと取る場合はNSNumericSearchできちんと比較する必要があります。
で、tweakのバージョン判定では2項目までで十分な事が多いのでkCF~の方がオススメです。うっかりspringboardが対象のtweakのconstructorでUIDevice使うと危険なので。UIDeviceを使ってはいませんが、iOS5が出た当初に発現していた画面1/4問題は、例えばLastAppでは以下のバージョン判定の1行が原因で起こっていました。
isFirmware3x_ = (class_getInstanceMethod(objc_getClass("SBApplication"), @selector(pid)) != NULL);これを以下に書き換えることで対処したと思われます。
isFormware3x_ = (kCFCoreFoundationVersionNumber < 550.32) ? YES : NO; // 550.32はiOS 4.0の数字
新OSが出た際の確認方法は/System/Library/Frameworks/CoreFoundation.framework/Info.plistのCFBundleVersionから確認できます。iOS5.1.xは690.10ですね。
2.0からの番号はこのあたりを参考に。chpwn / IconSupport - Firmware.h

IMP old, new; old = class_getMethodImplementation([UIKeyboardLayoutStar class], @selector(shouldShowDictationKey)); new = class_getMethodImplementation([UIKeyboardLayoutStar class], @selector(new_shouldShowDictationKey)); IMP tmp; tmp = old; old = new; new = tmp;オリジナルのメソッドを使う気がなければ最後のところは
old = new;だけで事足りてしまう。 また、method_exchangeImplementationsなんて素敵な関数もあるのでこうも書ける。
Method old, new; old = class_getInstanceMethod([UIKeyboardLayoutStar class], @selector(shouldShowDictationKey)); new = class_getInstanceMethod([UIKeyboardLayoutStar class], @selector(new_shouldShowDictationKey)); method_exchangeImplementations(old, new);いずれにせよ、これらの処理を行えば以後OSやアプリケーションがshouldShowDIctationKeyメソッドを呼び出すと、実際に処理が走るコードは自らが書いたnew_shouldShowDictationKeyメソッドのもととなる。 ちなみにnew_shouldShowDictationKeyは追加しなければならないので、class_addMethod関数で追加できる。
static BOOL replaced_UIKeyboardLayoutStar_shouldShowDictationKey(UIKeyboardLayoutStar *self, SEL _cmd) { return NO; }
class_addMethod([UIKeyboardLayoutStar class],
@selector(new_shouldShowDictationKey),
&replaced_UIKeyboardLayoutStar_shouldShowDictationKey,
"c@:");
メソッドの実装であるIMPを上書きするだけでも書き方は色々ある。
Method method = class_getMethodImplementation([UIKeyboardLayoutStar class], @selector(shouldShowDictationKey));
static BOOL replaced_UIKeyboardLayoutStar_shouldShowDictationKey(UIKeyboardLayoutStar *self, SEL _cmd) { return NO; }
method_setImplementation(method, &replaced_UIKeyboardLayoutStar_shouldShowDictationKey);
さて、これらの処理を適当な関数にまとめて、その関数を呼び出せば晴れてフックが完了するが、元々は存在しない関数だ。一体どうやって呼べばいいのか。%hook UIKeyboardLayoutStar
- (BOOL)shouldShowDictationKey { return NO; }
%end
iOS5.1からSiriが日本語に対応した事で、日本語キーボードでも音声入力が使えるようになりましたが
あまりの邪魔っぷりにこのキーを無効にするtweakを作りました。Require: iOS 5.1+です。
日本語フリックキーボードの場合だけ無効にするバージョンと全てのキーボードで無効にするバージョンを作りました。
全てのキーボードで無効にするバージョンはBigBoss提出予定です。
https://github.com/r-plus/NoDictation/downloads
ちなみにSiriが要らないのならSiriをOFFにすれば純正でこのボタンは無効です。
iPadは設定から音声入力のON/OFFが純正で可能です。
先日UMAXの4GBx2メモリをSofmap-Onlineで買ったのですが、初期不良を掴んでしまった時のメモ。
とりあえずここから症状を報告しました。https://www.sofmap.com/inquiry_mail_ec/exec/
たしかこんな感じ。
Windows使用中に突然落ちてしまった為、Memtest86+を走らせるとErrorの数値が変化せず落ちるため初期不良と思われます。
この度、ご注文を頂いておりました上記商品でございますが、 ご連絡頂きました状況から、初期不良の可能性が考慮されます 為、弊社にて交換のお手続きをさせて頂きたく存じます。 なお、商品の交換方法につきましては、弊社から交換商品と 着払いの返送用伝票をお客様のご注文時の配送先ご住所へ お送り致します。 交換商品をお受け取り頂く際に、お届けにあがった佐川急便 の配送担当者へお手元の不具合のある商品を、梱包頂いた状態 で返送用伝票とともにお渡し頂く事により、商品の交換と させて頂きます。 また、商品交換の際には、不具合品とともに、下記一式を 梱包箱へお戻しくださいますようお願い致します。 ○御買上票/納品書(商品に同梱)のコピー (原本はお手元にお取り置き下さい。) もしくはお名前・ご注文番号、不具合の症状を記載したメモ書き ○マニュアル、メーカー保証書、付属品など購入時の 製品に同梱されていた物全て。 梱包頂く箱や緩衝材がお手元に無い場合は、交換品をお届け 致します梱包材をそのままご利用頂いても結構でございます。 上記方法による交換にご了承頂けます場合は、大変お手数を お掛け致しますが商品の交換につきまして、ご希望の配送時間を 下記にご記入頂き、本メールをご返信頂けますようお願い 申し上げます。 時間帯指定(【】内に○をお願い致します。) 【 】午前中 【 】12:00-14:00 【 】14:00-16:00 【 】16:00-18:00 【 】18:00-21:00 【 】指定無し