2016年8月17日水曜日

iPhone PLUS (Powered by ASCII) に TimeAndEntryが紹介されました!

あの週間アスキーさんが運営されているiPhone PLUSで TimeAndEntryが紹介されました!

来月のお給料をアプリが予測?わかっちゃうんです!勤怠アプリ「TimeAndEntry」





掲載記事はこちら
http://iphone.ascii.jp/2016/08/12/884594544/


この機会にぜひダウンロードください!
→アプリをダウンロード



2016年7月30日土曜日

[PR]勤怠メモアプリを更新

-PR-勤怠メモアプリを更新しました。

今回は大規模アップデート。
今まで勤務時間から将来の残業時間を予測しお給料計算まで出来ちゃいます!
是非是非チェックしてみてください!


<TimeAndEntry-残業分析もできる打刻忘れナシの勤怠メモ>

2016年6月18日土曜日

[iOS開発] autolayout engine from a background, and crashed.

This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes.


今日は表題のメッセージ出くわしたので、ちょっと投稿したい。こんなコードを書いていたのである。


- (void)viewDidLoadSetupSearchBar{
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT0), ^{
        // バックグラウンドで行う処理を記述
        [self some_process];


    });

   /....../

    

}


-(void)some_process{
    [self.view setNeedsUpdateConstraints];          // <- いけない子



   /....../

}


実行すると表題のメッセージ。
まあ、バックグラウンドでオートレイアウトを動かさないでということなのであった。そういえば、描画関係はバックグラウンドで処理させようとするとうまく動かないが、何か内部処理として関係があるのかもしれない。

いろいろ試しましたが、描画するときに main に戻せば問題ない模様。
auto layout engine .... がどうとかちょっと罠にはまってしまいました。

-(void)some_process{

       dispatch_async(dispatch_get_main_queue(), ^{
         [self.view setNeedsUpdateConstraints];          // <- いけない子

        /....../

        });

}


以上、こんな感じ。
ではでは。



2016年4月5日火曜日

[iOS開発]XCODE7.3 のオートコンプリート(コード補完)がむかつく件

XCode7.3 の AutoCompleteってちゃんと動いてる?

Xcode7.3ではオートコンプリート機能がパワーアップしました!ってかいてある。



でもね?

これがむかつくわけだ!

例えばこんな風にユーザー定義のクラス名を補完させようとすると、全然出てくれないわけです。





図:ユーザー定義クラス T_Expense をコード補完させようとすると・・・?



全然コンプリートしない。むしろリストが多くて探してしまうわけです。でも全然ないわけ。

ちなみに、ビルドすると出てくるようになります。







図:ビルドしてみる。 T_Expense をコード補完させようとすると・・・?

オートコンプリートするための辞書がどうにかなっちゃってるんですかね? APPLEの中の人はこんなコンプリートで開発だか何かやってるのかな。不思議です。

ちなみに、ビルドの際にエラーがあろうがなかろうがオーケーです
ビルドのショートカットキーは Command +B。参考までに。



前のバージョンに戻すわけにもいかないしなぁ。
早く何とかして欲しいです。


というわけで。またー





2016年3月17日木曜日

[iOS開発][CoreData]The fetched object at index ….. has an out of order section name

The fetched object at index …..  has an out of order section name

今日はCoreDataをいじっていたら表題のエラーに出くわしたので、それを投稿したい。

対処としては簡単なのだが、なんかイマイチな仕様だなぁ・・・とモヤッたので書きたいのである。

さっそく、どんなコードを書いていたのかというと。

  NSFetchRequest *request = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@“clothes”
                                                  inManagedObjectContext:context];
        [request setEntity:entity];
        
        
  
        NSSortDescriptor *sd2 = [[NSSortDescriptor alloc] initWithKey:@“color” ascending:YES];
        NSSortDescriptor *sd3 = [[NSSortDescriptor alloc] initWithKey:@“size” ascending:YES];
        
        request.sortDescriptors = [NSArray arrayWithObjects:sd2,sd3, nil];
        
        NSDictionary *entityProperties = [entity propertiesByName];
        
        NSMutableArray *properties = [NSMutableArray arrayWithObject:
[entityProperties objectForKey:@“sex”]];
        [properties addObject:[entityProperties objectForKey:@"color"]];
        [properties addObject:[entityProperties objectForKey:@"size"]];
        [request setPropertiesToFetch:properties];
        
        [request setResultType:NSDictionaryResultType];
        
        NSFetchedResultsController *controller =
        [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:@“sex” cacheName:nil]; 
        
        controller.delegate = self;
        [controller performFetch:nil];


こんな感じなのである。performFetchをしたところで、エラーを出力してフェッチできないという状態。

まあ、メッセージにある通り、セクション指定をしてあるにもかかわらず、そのデータで区切れないデータだったのでエラーとしたようである。


・・・略・・・・

        NSSortDescriptor *sd2 = [[NSSortDescriptor allocinitWithKey:@“color” ascending:YES];
        NSSortDescriptor *sd3 = [[NSSortDescriptor allocinitWithKey:@“size” ascending:YES];
        
        request.sortDescriptors = [NSArray arrayWithObjects:sd2,sd3, nil];

・・・中略・・・・

        [[NSFetchedResultsController allocinitWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:@“sex” cacheName:nil]; 



なので、ソート条件に追加してやる


・・・略・・・・
        NSSortDescriptor *sd1 = [[NSSortDescriptor allocinitWithKey:@“sex ascending:YES];
        NSSortDescriptor *sd2 = [[NSSortDescriptor allocinitWithKey:@“color” ascending:YES];
        NSSortDescriptor *sd3 = [[NSSortDescriptor allocinitWithKey:@“size” ascending:YES];
        
        request.sortDescriptors = [NSArray arrayWithObjects:sd1,sd2,sd3, nil];

・・・中略・・・・

        [[NSFetchedResultsController allocinitWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:@“sex” cacheName:nil]; 



うまく動作!
何がモヤっとしたかというと、セクション区切りに使う場合には、その項目はプログラムの挙動的にはソートされていないと実現できないだろうという確信があったんですが、あえて、それはソート条件に入れてなかったんですよ。

だって、セクションに指定してますよ、ってメソッドに入ってますからね。

        [[NSFetchedResultsController allocinitWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:@“sex” cacheName:nil]; 


で、コンパイラエラーになりもしなけりゃ、実行時エラーにもならない。
お!動くじゃん。賢いね!と思ってたら、突然動かない。で、調べたら表題のエラー。

このエラー、データがたまたまセクション区切りできるように綺麗にデータベースに入ってると発生しないんですよ。ひどい仕様だと思いません?


ということでいつまでもボヤいていても仕方ないので、今日はこの辺で。

ではでは。










2016年3月7日月曜日

[iOS開発] _handleNonLaunchSpecificActions in iOS9

よくわからんエラーが出た

デバッガーからのメッセージはこんな感じ。

 -[UIApplication_handleNonLaunchSpecificActions:
      forScene:
      withTransitionContext:
      completion:] unhandled action -> 
      <FBSSceneSnapshotAction: 0x150b2aef0> 
       {
            handler          = remote;
            info = <BSSettings: 0x15333f650> 
            {
                (1) = 5;
            };
        }

:iOS 9.2.1 実機、 xcode7.2 で発生


stack overflow によると、iOS9 にて発生する事象(バグ?)のようである。

ようである、というのは このメッセージ、 _handleNon... と アンダースコアで始まるからだ。
このルール、apple の公式ドキュメントによると 内部メソッドという決まりがある。

ということで基本的にプログラムのロジックエラーではないというのが stack overflow のメンツのご意見。
まあ、私も彼らの意見を読んでみて、それが妥当であるように思う。

かならず発生するわけではなく、特定のビルドでもないからだ。
強いて言うと、画面操作を行っている場合に、メッセージログにこれが出る感じ。

ちなみに、iOS9 betaでも発生していたという情報もあるので、この事象はまだ治っていないということになる。


ではでは。


2016年3月2日水曜日

[iOS開発] APPNAME was compiled with optimization - stepping may behave oddly; variables may not be available.

久しぶりにアプリを改造していたら、表題のエラーが発生。


 検索してみるが、いまいち、的を得た内容がない。 完全な解決に至っていないので、まだ調査中ということになりますが、後世?のために何をしたかを記載しときます。


エラーメッセージ 


XXXアプリ was compiled with optimization - stepping may behave oddly; variables may not be available. 

発生する条件:
  1. 任意の場所、つまりどこでもいいからBreakPointを設定して実行すると、メッセージが表示される。 
  2. どんな操作をしても、データに関わらず発生するように見える。
  3. X-codeのスキームは複数設定してあるが、リリース用設定をしているスキーマでデバッグを実行させると発生する。 

条件3が限定的で怪しい。
いくつかスキーマの条件をいじってみると、どうもRun 設定で Releaseになっているとこのメッセージが表示されるようである。 新しいスキームをつくってみても、エラーが出ていないスキームでも、このオプションを設定するとエラーが発生する。

 このままにしておくわけにはいかない。何しろ、アプリをリリースするときは最適化した状態だし、最適化オプション無しなら動くということはたまたま動いているにすぎないからだ。  

 ググってみると、プログラム全体がおかしいという情報がちらほら。 作り直しは避けたいので、様々なバージョンから同じ条件で実行すると、エラーが発生しないバージョンが存在した。そこから頑張って作成すれば、エラーは出ないと思われるが、かなり古い状態なのでそこから作り直すのは避けたい。
悪あがきに、とりあえず x-code のプロジェクトファイルでも差分をとってみようかとチェックすることにした。






X-code付属のFileMergeを使って見る




 すると、 UserInterfaceState.xcuserstateで差分が大量に発生している。UserInterfaceState.xcuserstateとは何だろうか?エラーが発生していないバージョンにそのプロジェクトファイルをコピーしてみる。


・・・ エラーが発生した! これが原因のようだ。


 一説によると workspace や project layout に関する情報を個々のアカウントに紐付けている情報のようである。アカウントを複数使って何かしている場合には何か有用なのかもしれないが、アプリのロジック自体には影響しない。(gitにも登録不要)


 というわけで、どうもプロジェクトファイルが何らかの操作でおかしな状態になっていたようである。古いプロジェクトファイルをコピーして、そのバージョンから追加したファイルなど、再度紐付けてコンパイルする。


 ・・・問題ない。





差分が大量にあった問題のファイル




 ちなみに、このファイルはx-codeをちょっとでも触れば更新が入るようで、大量の差分が発生するのも納得である。この UserInterfaceState.xcuserstate がどうして、こんなエラーを吐くことにつながったのかは不明だ。

だが、現実問題として、このファイル以外に差分はなく、プロジェクトファイルのコピーで対処できてしまったのである。
 
 もやもやした結果だが、このままで開発を続けてみることにする。

どなたか、何かご存知でしたら情報ください。


2016年1月11日月曜日

mac de DVD-Video (なぜ 16:9 にならんのじゃー)

この前、嫁さんの友達からファミリービデオをDVDにして欲しいなどとお願いされた。
こういうお願いは非常に面倒である。


どうしてかって?
妻曰く。「あ、彼女は機械音痴だからね?」

機械音痴が望むDVDに焼くとは、
DVDプレーヤーで、何も違和感なく再生できるということだろうか。

「あの、妻子さん?・・・なんだろ、何かすごいDVDプレーヤーがあったりするのかな?」
「は?普通のでしょ?」
「・・・そうですよね」
「いや、うちってPS3で見てるじゃない?だからさ、」
「普通のヤツで見れたらいいよ」
「普通って?」
「普通だよ、わかんないかなあ?」

実は、我が家には専用のDVDプレーヤーというものはなく、
PS3DVDを再生しているのだ。
実はPS3くんは結構優秀でアップコンバートができたり解像度を変更したりと見やすく調整できるのである。

「あ、そうそう、これメディアね。ちょっと古いけど気にしないで」
そう言ってどこかに行ってしまう妻子。

手元には4GB SDカード。4GB ? 意味がわからない。
混乱しつつ amazon SDカードの価格を調べる。・・・間違いない。そうだ。今は128GBの時代なのだ。
うーん、どんなDVDプレーヤーを使ってるんだろう、スマホとかない時代じゃないだろうか。

というわけで、昔のプレーヤーでも観れるDVDを作成しなければならないのである。

・・・すごく大変である。

当方、以下の条件でDVDを作成。
非常に苦労したので、自分への備忘録&どなたかへの助けになればと思い記事にしました。

条件:
Mac OS X ElCaptain
Windows 7 ( VMware fusion 7.1 )
・他のこだわり。出費はDVD-Rだけ。あとはフリーソフト!
ドタバタの導入はこれくらいにしておいて、どんなプレーヤーでも観れるだろうDVD-Videoの作成を
Mac  Windows7 でどうやるかを以下に記します。

手順はこちら

ポイント
・メディアは 16:9 で作成された動画であり、どんなプレーヤーでも 16:9 で表示できるように焼きこむ。
  1. Total Video Converter App Store から入手し、Mac にインストールする
  2. Total Video Converterを起動し、DVD(NTSC)high quality に設定する。
  3. 変換を実行
  4. Windows7 に変換ファイルを移動
  5. Windows7 DVDメーカーを起動。右下にあるオプションリンクをクリックし、画面サイズを3:2から16:9 へ変更する
  6. DVDメーカーで変換ファイルを読み込み、DVDを焼きこむ。メニューはお好みで。

16:9で観れるようにするのが大変でした。
まあ、DVD-Videoを作成するソフトを買ってしまえば早いんですが、2万円ぐらいしますしね。




Total Video Converter ってこんなやつ。


で、実際にはいろいろトラブルがありました。

VMware fusionで動く Windows7 DVDを焼いたんですが、Blu-ray の外付けドライブでは認識してくれませんでした。
どうもUSB3.0のドライバがうまく読み込まれない模様。USB2.0の古いDVD-RWで対処。
(Logitec:LBD-PME6U3LBK ではうまく動作しなかった。

DVDメーカーはWindows7にあるのですが、Windows8ではムービーメーカーになったようです。
うちにはWindows8もあるので、それを使おうと思ったんですが、ムービーメーカーにはDVDを作る機能はない模様。
・・・なんでやねん。

DVDメーカーで単に画面サイズを16:9に指定しても、正しく16:9に設定されずにDVD-Videoになりました。
これを防ぐには元ファイルの段階で正しいアスペクト比が書き込まれたmpegファイルを用意する必要があります。
macでお手軽に実現するにはTotal Video Converterを使うのが楽チンです。




ーその日
「妻子ッ、できたよ!」
「ふーん、ありがとう」
「・・・」
・・・こんなもんです。。

ー後日。
「友達、見てくれたって?」
「まだ見てないって」
「え?」
「そんなもんだよ」
・・・人生いろいろです。。