2012年12月23日日曜日

編集できなくなったMacの連絡先の再構築仕方(10.8.3対応)

いつの頃からか、Mac上の連絡先.appで編集ができなくなった。

正確には、追加や既存分の修正は出来るが、削除ができない。
なぜだか連絡帳内に同じ人のデータが複数存在し、それが消せないのだ。

色々やった結果、ようやく修正方法、というかそのデータベースの再構築方法がわかったので記しておく。

  1. 連絡先を起動する。
  2. 編集〜すべてを選択。
  3. マウス右クリック(1ボタンマウスならシフト+クリック?)〜vCardを書き出す。
    なんとか.vcfというファイルが出来る。内容はテキストである。
  4. 連絡先を閉じる。
  5. Finderで/Users/ユーザー名/Library/Application Support/AddressBookフォルダを削除する。
    必要ならどこかへコピーしておく。
  6.  テキストエディタなどで先ほど書きだしたvcfファイルを開く。
  7. その中の重複している部分を探し削除する。
    1人分は、BEGIN:VCARDからEND:VCARDまでである。
    写真を入れてると結構長くなる(テキストにエンコードされてるのでそのまま読める)。
  8. 保存。
  9. 連絡先を再起動する。
    自分とアップルの連絡先だけ入った状態で開くはず。
  10. ファイル〜読み込むでvcfを読む。
これで重複がなくなり、そうすると削除もできるようになる。
どうも、重複あると削除できなくなるようである。
(どちらを削除して良いかわからなくなるからか?)

OS X 10.8.3 ではカード〜重複項目を検索だけで重複チェックとその結合ができるようになった。極めて簡単。

それにしてもどうして重複が発生したのか。
自分でそうした覚えはないので、OSのバージョンアップ時に新旧が結合されたのか、iOSデバイスとの同期時に結合されてしまったのか、まあ、そんなところだろう。

アップルの製品は、よくできているところがある反面、ツメが甘いところも多々見受けられるので、回避策を知っておくこと、それを共有しておくことは重要だ、と思う今日この頃である。

2012年12月21日金曜日

iOSの色々なバグや仕様

X−BASIC for iOSの開発中に発見したiOSのバグや隠れ仕様をあげておく。

発生するバージョンを特定できてないものもあるが、今後の開発時に注意すれば良いということで。

・横画面において、キーボードwidthとheightが逆になってる
  (というか、縦画面時のサイズのまま返ってきている)
 0,0,1024,352のはずが、0,0,352,1024になってる。
 画面方向を認識して、読み替える必要がある。

・MFMailComposeViewControllerで送信するとメモリーリークが発生する
 下書き〜削除・保存すると発生しない
 宛先をメニューを選ぶだけでは発生しない   
  シミュレーター上だけかもしれない


・バックグラウンドでUIGraphicsGetImageFromCurrentImageContext()が取得できない
常にリターン値がNULLになる

・ナビゲーションバーのボタンのタッチ有効範囲はかなり広く、かつnaviが最優先されるため、それに隣接する領域ではタッチが検出できない。
ナビゲーションバーのすぐ下のあたりなど。
[lblBasicFile becomeFirstResponder];してもだめ

・[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];が2回連続でかかることがある
キーボードを閉じてないにもかかわらず「開く」が連続で通知されるため、順番に依存する処理で異常が起こる。
iOS5.0のみ発生。iOS5.1では発生しない。
日本語環境だけかもしれないが、英語環境では未検証。



・デジタルコンパスはメインスレッドで初期化しないと取得できない。
locationManager=[[CLLocationManager alloc]init];
をメインスレッド内で実行しないと、デリゲートが発生しない。

・CGContextRefで宣言したメンバーにはKVOが設定できない
 設定しても発生しない。

・実行時に Unknown class  ??? in Interface Builder file.と出るときは、そのクラスの.mファイルのTarget Membershipにチェックを入れる
Xcode右上のViewの一番右から

・[s drawAtPoint:point withFont:[UIFont fontWithName:fontName size:pointSize]];
で、pointSize=0だと<Error>: CGAffineTransformInvert: singular matrix.というエラーが出る。
エラーと内容があってない。

 ・UIWebViewへloadHTMLした場合、webViewDidFinishLoad以降でないと操作してはいけない

・ステータスバーのタップで先頭にスクロール
 editor.scrollsToTop    =YES;
スクロールさせたいもののみYESにし、他はNOにしなければならない

・UIView.transform=CGAffineTransformMakeTranslation(0, -fontWy);
で 平行移動がかかるのはUIViewのframeそのものであり、内容が移動するわけではない。
描画範囲も変わらない。
したがって、スクロール処理には使えない。

 ・HTMLの表示され方いろいろ
 Chrome            <pre>内にフォント指定は無効
 UIWebViewとChrome     <pre>と<table>内の改行の扱いが異なる

 Chromeは<table>内は<pre>が無効になっている。
  改行には<br>が必要で、スペースは無視される。
 UIWebViewはSafariとも異なる
 そのため、HTML表示確認は必ずUIWebView上で行わなければならない。

・UIGraphicsGetImageFromCurrentImageContext()はそれが含まれるコンテキストの内容だけを出力するのではなく、現在有効になっているすべてのコンテキストの内容を合成して出力してしまう。
多分、呼び出し時点までにUIGraphicsBeginImageContextされている全てのコンテキストだと思われる。

・CGBitmapContextCreateImage()にCGImageRetain()を付けたら画面がおかしくなる=メモリーリークする

・複数のコンテキストを使う場合、その切替には
  UIGraphicsPushContext(context);
  UIGraphicsPopContext();
が重要。これがないとコンテキストの切替後にエラーが出る。
ドキュメントではメインスレッド内で呼び出せとあるが、サブスレッド内でも問題ない。

・アプリケーション内フォントを追加する場合
必ずルート直下のサブディレクトリに置く必要がある
サブディレクトリの中のサブディレクトリ内は不可
これは他のリソースでも同じ。

・AirPrintはメインスレッドからしか実行できない
ポップアップを伴うので仕方ない様子。UIを持つものは全てメインスレッドで実行するのが慣わし。


おまけ
・Xcodeのsnapshotは過去に消したファイルも戻してしまうので、事実上使いものにならない。
えらい目にあった。
全保存したいなら、自分でzip圧縮化フォルダごとコピーするのが吉。



2012年12月11日火曜日

Objective-Cでの文字列系オブジェクト変換

Objective-Cでの文字列系オブジェクト変換。
X-BASIC for iOSの開発中にいろいろ出てきたのでまとめておく。

NSString*からchar*への変換
    NSString* str = @"AAA";
    char* cp = [str UTF8String];


char*からNSString*への変換
 char* cp = "AAA";
 NSString* str = [NSString stringWithCString: cp encoding:NSUTF8StringEncoding];

NSStringからCFStringRefに変換
 CFStringRef aCFString = (CFStringRef)aNSString;

CFStringRefからNSStringに変換
 NSString *aNSString = (NSString *)aCFString;

Cでの記述部分とObjective-Cでの記述をリンクするときにはこのあたりの変換が必須となる。

追記:
stringWithFormat@"%s"ではCの文字列("〜")を受けられるが、
UTF8には対応していないので、ASCIIでない文字は化ける。
UTF8対応するにはstringWithCString:encoding:が必要となる。

2012年12月8日土曜日

iOSでのいろんな画面(2)

画面の続き。

充電機能はサポートしてない(日本語)

充電機能はサポートしてない(日本語);ロック画面時

2012年12月5日水曜日

iOSでのいろんな画面(1)


iOS上で見られる、いろいろな場面での画面を集めておこうかと。
もちろん、いつでも見られるものではなく、ちょっと特殊な状況での物。
取説で使うかも知れないので。

電池残り20%(英語)
充電機能なし(英語)
Bluetooth有効確認(英語)
Bluetooth有効確認(日本語)
電池がもう少しで切れる(日本語)

電池が切れる直前(日本語のようだけど実は英語)
 Bluetooth接続確認

2012年12月4日火曜日

X-BASIC for iOS

長らく開発していた、iPad/iPod touch/iPhone向けBASIC言語、「X-BASIC for iOS」がようやく発売できました。で、その宣伝漫画なども作ってみたので公開。
転載可です。




 

興味の湧いた方は、是非ご購入を<m(__)m>。

追伸(2013/01/01)
最新版V1.50が公開されました。
外部アプリからのファイル取り込み機能、電子メール送信機能などが追加されました。

追伸(2013/01/22)
V1.60が公開されました。
画面描画が大幅に高速化されました。その他機能も追加されています。

追伸(2013/01/24)
V1.70を審査に出しました。
バグ修正と、いくつか機能追加をしています。

追伸(2013/01/31)
V1.70は拒絶されました。
BASICプログラムを外部から入れられるようになってると、やはりはじかれるようです。
インポート機能を削除したV1.71を作成中です。

追伸(2013/02/01)
V1.71を再審査に出しました。

追伸(2013/02/08)
今後X-BASIC for iOSのサポートは専用ページに移行します。