2013年10月25日金曜日

Winter '14でのListView直接表示(Force.com)

たまにはForce.comネタを。 

タイトルの件ですが、Webタブに直接ViewのURLを指定して、
 オブジェクトのランディングページをすっ飛ばしたい!
という要望を客先から聞いた時に isdtp=vwなどのURLパラメータを設定して
実現していた方は多いかと思います。


Winter'14から、上記方法では実現できなくなっていました。
デバッグしてみると、どうやらシームレスなリンクをするためのsrcUpメソッドが
iframe内で使えなくなっていることが直接の原因のようです。
(クリックインジェクション対策のせいかな?)

なので試行錯誤した結果、

VFページで

<apex:page action="{!URLFOR('ViewのURL')}" />

の内容でページを作成し、
VFタブを作成して設定すれば実現できました。

実はこれ、AppExchangeで配布されていたパッケージで実装されていたやり方なんですが、
目から鱗でしたね。

ええ。
その前日私はsrcUpを全てhrefリンクに変更するjavascriptを書きましたから(

上記方法でも一応は動きます。
が、面倒だしレンダリング仕様変更されたら一発アウトなのでやらない方がいいです。

というわけでちょこっとしたTipsでした。ではでは。

2013年10月19日土曜日

Xcode5からの新機能「Images.xcassets」の使い方について

Xcode5から画像リソースが管理しやすくなる機能「.xcassets」が追加されました。今回はこの機能の使い方について書きます。


2013年10月17日木曜日

Rubyの文字列リテラルのUnicodeエスケープがうまくいかない時

Ruby 2.0 にて確認した内容です。

Rubyの文字列リテラルはバックスラッシュ記法を用いてUnicode文字をコードポイントから表示することが出来ます。
(\uXXXXの形式)

>> puts "\u3042"
>> あ


しかし、コードポイントが5桁の場合、この書き方だとうまくエスケープされません。
(前半4桁と最後の1桁の2文字扱いになる)

>> puts "\u20e95"
>>  ⃩5


この場合、以下の様にコードポイント部分を{}で囲むと期待通りにエスケープされます。
(\u{XXXX}の形式)

>> puts "\u{20e95}"
>> 𠺕


また、この形式ならば、スペースで区切ることで複数コードを一度にエスケープできます

>> puts "\u{20e95 3042}"

2013年10月8日火曜日

Xcode5でQuickHelpを書く

Xcode5から実装したメソッドにQuickHelpを書く事が出来るようになったようです。ので、簡単に試してみました(公式ドキュメントほぼそのままですが...)。

メソッド

書き方は表示したいメソッドの上部へ記述に従って書くだけでOK。例えば以下のように。
/*! 社員の出社状況を設定
 * \param employeeNumber 社員番号
 * \param state 出社状況。YESなら出社で、NOならズル休み
 * \returns 出社状況がDBに保存されたかを返す
 */
- (BOOL)setEmployeeWork:(NSInteger)employeeNumber withState:(BOOL)state
{
    // 略
}
メソッドを呼び出している場所で、三点タップしてあげると以下のように表示される(これは公式メソッドのQuickHelp表示方法)。

メソッド上にカーソルが存在する際、Xcodeのプロパティに以下のように表示されもします。


クラス

メソッドと同じようにクラスに対してもQuick Help表示できます。例えば以下のように。
/*! ViewController
 * 存在価値のないクラス
 */
@interface ViewController : UIViewController
ViewControllerを三点タップすると以下のように表示されます。

ちなみにQuick Helpを追加しなかった場合、以下のように継承元クラスのQuick Helpが表示されます。

2013年9月19日木曜日

iOS6からiOS7への対応

社内で書き残していた内容をブログに書き写した内容となります。個人アプリをiOS7に対応させた時に書き残した内容なので掲載画像がアレですが気にしないでください。

①アイコンの追加対応

iPhoneで1種類、iPadで2種類増加されました。iPhoneが1種類しか必要ないのは対応バージョンに非Retinaが無いためです。
iPhone(120x120)
・Icon-60@2x.png

iPad(76x76/152x152)
・Icon-76.png
・Icon-76@2x.png

②storyboardで作成した箇所のレイアウトが崩れる対応方法

Xcode4.6以前で開発していたプロジェクトをXcode5で起動し、初めてstoryboardを開いた時にstoryboardで作成した全レイアウトを自動調整してくれる。もしくは警告にそれっぽいメッセージがあるのでクリックすると自動修正されます。それでも未だグチャグチャな場合は他に原因があり。

③UINavigationBarとStatusBarをUIViewに上被せで表示させたくない場合の対応方法

以下はUIViewControllerクラス等を継承したクラス上で使う想定のコード。もしTabBarだけは元の状態にしたいなら UIRectEdgeBottom を使う。
self.edgesForExtendedLayout = UIRectEdgeNone;

④StatusBarとUINavigationBar上の文字とが被る

StatusBarの上にUINavigationBarが被さる事が原因だが③の方法で解決しない。発生する原因はUINavigationController上にUINavigationBarが追加されていないからUIViewController側がUINavigationBarを一つのControllerと見なして自動調整してくれないからなので、対応方法は以下のようにUINavigationController側でStatusBarとTopBarを使うよう定義すれば良い。

⑤UIAlertViewがaddSubView出来なくなった問題への対応方法

TSAlertViewなどのUIViewを継承したカスタムAlertViewで代用。クラス名を置き換えるだけで対応出来るが、ダイアログの見た目はiOS6以前のものとなる。もしくはUIAlertView風に見せるのではなくUIViewControllerをモーダル表示する。
https://github.com/mindbrix/TSAlertView

⑥UI部品の背景色が変更されない問題への対応方法

色設定の仕様が以下のように変わりました。今まで背景色を変更するのに使っていたメソッドが文字色変更用となり、背景色を変えるメソッドが新たに追加されています。
// UI部品の文字色変更
setTintColor

// UI部品の背景色変更
setBackgroundColor
以下は具体的な背景色を変更する例。UISearchBarなどの特殊なUIに関してはメソッド名が違う点と色濃く表示される点に注意が必要、少し薄くするのがベターかもしれません。
UIColor color = [UIColor redColor];
// before
[self.navigationController.navigationBar setTintColor:color];
[self.navigationController.toolbar setTintColor:color];
[searchBar setTintColor:color];

// after1
[self.navigationController.navigationBar setBackgroundColor:color];
[self.navigationController.toolbar setBackgroundColor:color];
[searchBar setBarTintColor:color];

// after2(差分だけ)
[searchBar setBarTintColor:[color colorWithAlphaComponent:0.2f]];


⑦UI部品の一括色変更する対応方法

Window#対象メソッド で変更可能です。ただし、Window#setBackgroundColor で変更されるUIはUINavigationBarのみっぽく、UIToolBarなどは変更できませんでした。iOS7からデフォルト色が白から青に変更されているため注意が必要です。
// AppDelegateクラス上
UIColor color = [UIColor redColor];

[self.window setTintColor:color];
[self.window setBackgroundColor:color];


⑧ホーム上のアプリ名の省略されない最大文字数変更

iOS7からフォントが変更されたのに伴い、ホーム上のアプリ名の文字サイズが若干変わったようです。今までは半角13文字まで省略されずに表示されていましたが、iOS7では半角12文字までに変わっていました。
iOS6:半角MAX13文字
         :全角MAX6文字
iOS7:半角MAX12文字
         :全角MAX6文字

余談

この対応を入れたアプリを一週間以上前に申請したのですが未だにIn Reviewにすらステータスが変わらないので、今対応して申請してもしばらく待たされそうです。

2013年8月5日月曜日

LeapMotion と openFrameworks で シューティング macアプリ

前回(Three.js)と前々回(box2dweb)につづいてLeapMotionネタです。

今回はmacアプリ。つくるのは前回みたいなシューティングゲームっぽいもの。
openFrameworksを使って
そこにLeapMotionを繋いでみます。
3次元に表示にするのでopenFrameworksアドオンのofxBt を使います。
そして初めてのC++。