自宅プログラマーの憂鬱

Since 2013。個人でアプリ作っています。

キーチェーンアクセスから.p12が書き出せない

こちらを参照させて頂きました。

ios - iOSでプッシュ通知の証明書を.p12形式でexportしようとしたら.p12形式が選択できない - スタック・オーバーフロー

Push通知を行うにあたって、AWSSNSでAPNSを使おうと思ったのですが、SNSに証明書を設定するのに.p12形式の証明書をアップするのに、キーチェーンアクセスから.p12形式のファイルが書き出せなくて困ってました。答えは、以下の項目を"すべての項目"ではなくて、”自分の証明書"にすると書き出せました。めでたしめでたし。

f:id:ihatomo:20161108171321p:plain

iOSのPush NotificationでAppの有効な“aps-environment”エンタイトルメント文字列が見つかりません"となる

久しぶりのエントリーです。
しばらくtumblrに書いていたのですが、こちらに戻ってきました。

初めてアプリにPush通知機能を搭載しようとしたのですが、はまりまくりましたのでシェアします。搭載自体は、こちらを参考にしました。少し記事が古いためところどころ読み替えが必要ですが、そんなに混乱はなく実施できると思います。

iOSでプッシュ通知を実装する方法の超詳細まとめ(前編) | Lancork

で、この通りやってもタイトルの通り以下のエラーが消えない。

error => (NSError)Error Domain=NSCocoaErrorDomain Code=3000 "Appの有効な“aps-environment”
エンタイトルメント文字列が見つかりません" UserInfo={NSLocalizedDescription=Appの有効な
“aps-environment”エンタイトルメント文字列が見つかりません}

Google先生に聞くと、大抵Push Notificationを有効にしてプロビジョニングプロファイルを作り直せ、というのが解答なのですが、それもやった。何度もやった、、、お手上げ。仕方ないので、StackOverflowとかに投稿しようかと思った矢先、こちらをみつけました。

f:id:ihatomo:20161106131541p:plain

もうアホかと、、。 アプリ本体のTargetのCapabilitiesがOFFになってるじゃありませんか。ここをONにしてクリア! やれやれ。

iPhone動画カメラアプリは、撮ったファイルが自動で消えない

今作ってる動画カメラアプリですが、iTUNES Connectで申請まで終わって、やれやれ、ということで自分のiPhoneにローカルインストールして使っていたら、ストレージがいっぱいになったぞゴルァ!と怒られてしまいました。んなこたーないだろう!?とiPhoneのストレージ使用状況を見ると、何と私のカメラアプリが、数ギガにまで膨れ上がってるじゃないか!?ということで早速調べてみた。

このアプリは、明示的に「保存」しない限り、写真フォルダーに動画を保存しないつくりなのですが、それでも一時ファイルがどんどん残ってしまいます。なので消さないといけなかったのね。早速、申請を取り下げて修正をすることに。

//インスタンス変数として宣言
NSString *pathToVideo;

//録画が終わったら起動されるメソッド
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    NSURL *videoURL  = [info valueForKey:UIImagePickerControllerMediaURL];
    pathToVideo = [videoURL path];
    _videoURL = pathToVideo;
    //PickerControllerを閉じる
    [self dismissViewControllerAnimated:YES completion:nil];
    
//   取った画像の再生
    NSURL *url = [info valueForKey:UIImagePickerControllerMediaURL];
    playerItem = [[AVPlayerItem alloc] initWithURL:url];
    [playerItem addObserver:self forKeyPath:@"status" options:0 context:&ItemStatusContext];
    [[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(playerItemDidReachEnd:)
     name:AVPlayerItemDidPlayToEndTimeNotification
     object:playerItem];
    player = [AVPlayer playerWithPlayerItem:playerItem];
    [playerView setPlayer:player];
    //再生開始
    [player play];
}


//必要なタイミングでこのメソッドを呼び出す
-(void) deleteFile
    {
    //ここで録画したファイルを消す
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:pathToVideo]) {
        NSError *error;
        // Attempt to delete the folder containing globalDel.videoPath
        
        if ([fileManager removeItemAtPath:[pathToVideo stringByDeletingLastPathComponent] error:&error] != YES)
        {
            NSLog(@"Unable to delete file: %@", [error localizedDescription]);
        }else{
            NSLog (@"消去成功");
        }
    } else {
        NSLog (@"消去失敗");
        
    }
}

何でクラッシュするの?

iPhoneアプリ、バージョンUPしたものがAPPストアでReady for saleになった。
早速喜んでDLして起動したら、、、 |)゚0゚(| ホェー!!


起動直後にクラッシュ!!


もちろん開発環境では問題なく動いてる。何でだよ!? 急いでAPPLEにはメールしたけど、こういう場合何かできることってあるのかなぁ。

Hours Install

UIが良いらしいのでiPhoneアプリのHours入れてみる。500円。

何時から何時まで何をやってたかLOGするアプリ。
なるほど、複雑な事やらせる割には直感的に操作できる。プリセットしたタスクをStart/Stopするだけ。
英語アプリだから英語で使うことにする。

ただ、これを何に活用するんだか、、、。

UIToolBar これじゃ動かない 惜しい!



/*
//
//
// toolbarにキレイなアイコンと文字を表示させる方法
//
//


//画像を選ぶ(元は300X300くらいで良い。背景を透明にすること。jpgはダメ)
UIImage *image = [UIImage imageNamed:@"win.png"];


//UIButtonを作成する
UIButton *vi = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 35)];
[vi setBackgroundImage:image forState:UIControlStateNormal];
[vi addTarget:self action:@selector(onTapTest:) forControlEvents:UIControlEventTouchUpInside];

//ラベルを作成する (センタリングの方法が良くわからないので、CGRectMakeにて左右位置を調整している
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(2, 0, 50, 65)];
label.text = @"写真を撮る";
label.textColor = [UIColor darkGrayColor];
label.font = [UIFont systemFontOfSize:10];
label.backgroundColor = [UIColor clearColor];
[vi addSubview:label];
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithCustomView:vi];
button.width = 50;

//画像を選ぶ(元は300X300くらいで良い。背景を透明にすること。jpgはダメ)
UIImage *image1 = [UIImage imageNamed:@"win.png"];

//UIButtonを作成する
UIButton *vi1 = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 35)];
[vi setBackgroundImage:image1 forState:UIControlStateNormal];
[vi addTarget:self action:@selector(onTapTest:) forControlEvents:UIControlEventTouchUpInside];

//ラベルを作成する (センタリングの方法が良くわからないので、CGRectMakeにて左右位置を調整している
UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(2, 0, 50, 65)];
label1.text = @"写真を選ぶ";
label1.textColor = [UIColor darkGrayColor];
label1.font = [UIFont systemFontOfSize:10];
label1.backgroundColor = [UIColor clearColor];
[vi addSubview:label1];
UIBarButtonItem *button1 = [[UIBarButtonItem alloc] initWithCustomView:vi1];
button1.width = 50;


//画像を選ぶ(元は300X300くらいで良い。背景を透明にすること。jpgはダメ)
UIImage *image2 = [UIImage imageNamed:@"win.png"];

//UIButtonを作成する
UIButton *vi2 = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 35)];
[vi setBackgroundImage:image2 forState:UIControlStateNormal];
[vi addTarget:self action:@selector(onTapTest:) forControlEvents:UIControlEventTouchUpInside];

//ラベルを作成する (センタリングの方法が良くわからないので、CGRectMakeにて左右位置を調整している
UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(2, 0, 50, 65)];
label2.text = @"サイズ調整";
label2.textColor = [UIColor darkGrayColor];
label2.font = [UIFont systemFontOfSize:10];
label2.backgroundColor = [UIColor clearColor];
[vi addSubview:label2];
UIBarButtonItem *button2 = [[UIBarButtonItem alloc] initWithCustomView:vi2];

//画像を選ぶ(元は300X300くらいで良い。背景を透明にすること。jpgはダメ)
UIImage *image3 = [UIImage imageNamed:@"win.png"];

//UIButtonを作成する
UIButton *vi3 = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 35)];
[vi setBackgroundImage:image3 forState:UIControlStateNormal];
[vi addTarget:self action:@selector(onTapTest:) forControlEvents:UIControlEventTouchUpInside];

//ラベルを作成する (センタリングの方法が良くわからないので、CGRectMakeにて左右位置を調整している
UILabel *label3 = [[UILabel alloc] initWithFrame:CGRectMake(2, 0, 50, 65)];
label3.text = @"絵を選ぶ";
label3.textColor = [UIColor darkGrayColor];
label3.font = [UIFont systemFontOfSize:10];
label3.backgroundColor = [UIColor clearColor];
[vi addSubview:label3];
UIBarButtonItem *button3 = [[UIBarButtonItem alloc] initWithCustomView:vi3];


*/



/*
//
//
// toolbarにキレイなアイコンと文字を表示させる方法
//
//


//画像を選ぶ(元は300X300くらいで良い。背景を透明にすること。jpgはダメ)
UIImage *image = [UIImage imageNamed:@"win.png"];


//UIButtonを作成する
UIButton *vi = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 35)];
[vi setBackgroundImage:image forState:UIControlStateNormal];
[vi addTarget:self action:@selector(onTapTest:) forControlEvents:UIControlEventTouchUpInside];

//ラベルを作成する (センタリングの方法が良くわからないので、CGRectMakeにて左右位置を調整している
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(2, 0, 50, 65)];
label.text = @"写真を撮る";
label.textColor = [UIColor darkGrayColor];
label.font = [UIFont systemFontOfSize:10];
label.backgroundColor = [UIColor clearColor];
[vi addSubview:label];
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithCustomView:vi];
button.width = 50;

//画像を選ぶ(元は300X300くらいで良い。背景を透明にすること。jpgはダメ)
UIImage *image1 = [UIImage imageNamed:@"win.png"];

//UIButtonを作成する
UIButton *vi1 = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 35)];
[vi setBackgroundImage:image1 forState:UIControlStateNormal];
[vi addTarget:self action:@selector(onTapTest:) forControlEvents:UIControlEventTouchUpInside];

//ラベルを作成する (センタリングの方法が良くわからないので、CGRectMakeにて左右位置を調整している
UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(2, 0, 50, 65)];
label1.text = @"写真を選ぶ";
label1.textColor = [UIColor darkGrayColor];
label1.font = [UIFont systemFontOfSize:10];
label1.backgroundColor = [UIColor clearColor];
[vi addSubview:label1];
UIBarButtonItem *button1 = [[UIBarButtonItem alloc] initWithCustomView:vi1];
button1.width = 50;


//画像を選ぶ(元は300X300くらいで良い。背景を透明にすること。jpgはダメ)
UIImage *image2 = [UIImage imageNamed:@"win.png"];

//UIButtonを作成する
UIButton *vi2 = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 35)];
[vi setBackgroundImage:image2 forState:UIControlStateNormal];
[vi addTarget:self action:@selector(onTapTest:) forControlEvents:UIControlEventTouchUpInside];

//ラベルを作成する (センタリングの方法が良くわからないので、CGRectMakeにて左右位置を調整している
UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(2, 0, 50, 65)];
label2.text = @"サイズ調整";
label2.textColor = [UIColor darkGrayColor];
label2.font = [UIFont systemFontOfSize:10];
label2.backgroundColor = [UIColor clearColor];
[vi addSubview:label2];
UIBarButtonItem *button2 = [[UIBarButtonItem alloc] initWithCustomView:vi2];

//画像を選ぶ(元は300X300くらいで良い。背景を透明にすること。jpgはダメ)
UIImage *image3 = [UIImage imageNamed:@"win.png"];

//UIButtonを作成する
UIButton *vi3 = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 35)];
[vi setBackgroundImage:image3 forState:UIControlStateNormal];
[vi addTarget:self action:@selector(onTapTest:) forControlEvents:UIControlEventTouchUpInside];

//ラベルを作成する (センタリングの方法が良くわからないので、CGRectMakeにて左右位置を調整している
UILabel *label3 = [[UILabel alloc] initWithFrame:CGRectMake(2, 0, 50, 65)];
label3.text = @"絵を選ぶ";
label3.textColor = [UIColor darkGrayColor];
label3.font = [UIFont systemFontOfSize:10];
label3.backgroundColor = [UIColor clearColor];
[vi addSubview:label3];
UIBarButtonItem *button3 = [[UIBarButtonItem alloc] initWithCustomView:vi3];


*/

iPhoneアプリ「超」入門

絶対に挫折しない iPhoneアプリ開発「超」入門【iOS6対応版】

絶対に挫折しない iPhoneアプリ開発「超」入門【iOS6対応版】

これ終了。

X-Codeの使い方
クラス、インスタンス、メソッド、プロパティとは
Cの復習
UITool KIT
地図、カメラアプリなどの作成
Developer登録とiPhoneへのインストール
Objective-Cについては全く足りない
デバッグ方法も記載ない