[iOS] Swift4 で追加された Codable で、 ?とか配列とかBoolも含んだJSONを読み書きしたい

2017/11/24

こんにちは。きんくまです。

ジッピー電卓の中で、計算履歴の保存などにJSONファイルを利用しています。

これまで使っていたライブラリがあったのですが、Swift4からはネイティブでJSONが簡単に扱えるようになったみたいなので、そちらでコードを書き直しました。(いま申請中)

Swift4のJSONについて

どういうものかは下の参考サイトを見ていただくとすぐわかります。

参考)
>> [Swift 4] SwiftyJSONを使わずにシンプルにJSONをデータ構造化する
>> Swift4 CodableでJSONが扱いやすくなる? – Qiita
>> Swift 4からFoundationに採用されるCodableプロトコルに感動した #wwdc2017
>> Swift 4でJSONの扱い – Galapagos Engineering Blog

で、ちゃんと記事を読み込んでいないせいかもしれないのですが、Optionalの? とか、 配列だとか、Boolのときにうまくできなかったので、それの対応方法を書こうと思いました。

こんな感じのJSONを読み込みたいです。

    //全部あるパターン
    let sampleJSON1 = """
{
    "name":"株式会社サンプルジェイソン",
    "address":"東京都サンプル区",
    "employees":[
        {
            "name":"田中さとし",
            "age":28,
            "is_retired":false
        },
        {
            "name":"さくらい太郎",
            "age":48,
            "is_retired":false
        },
        {
            "name":"元ぶちょう",
            "age":83,
            "is_retired":true
        },
    ]
}
"""

この投稿の続きを読む »

LINEで送る
Pocket

[iOS] swiftでクロージャーに@escapingをつける場合を調べてみた

2017/10/18

こんにちは。きんくまです。

自分でクロージャーを使ったメソッドを作りたかったときに、@escapingのことをよくわからなかったので調べたメモです。

参考サイト
>> The Swift Programming Language (Swift 4): Closures
>> What Do @escaping and @noescape Mean In Swift 3

@escapingしない場合

まず、@escapingしないクロージャーの場合を作ってみました。

class MathUtil{
    var num1:Int
    var num2:Int
    
    init(num1:Int, num2:Int){
        self.num1 = num1
        self.num2 = num2
    }
    
    //クロージャーの返り値を10倍する
    func tenTimes(equation:((Int, Int)->Int)) -> Int {
        return equation(num1, num2) * 10
    }
}

class ViewController: UIViewController {
    
    var num3:Int = 2
    var util:MathUtil? = MathUtil(num1: 5, num2: 3)

    override func viewDidLoad() {
        super.viewDidLoad()
        
        test_tenTimes1()
        test_tenTimes2()
        test_tenTimes3()
    }

    func test_tenTimes1(){
        guard let util = self.util else { return }
        let result = util.tenTimes { (num1:Int, num2:Int) -> Int in
            return num1 + num2
        }
        print("test_tenTimes1 result = \(result)") //result = 80
    }
    
    func test_tenTimes2(){
        guard let util = self.util else { return }
        let result = util.tenTimes { (num1:Int, num2:Int) -> Int in
            return num1 - num2
        }
        print("test_tenTimes2 result = \(result)") //result = 20
    }
    
    func test_tenTimes3(){
        guard let util = self.util else { return }
        //selfをつけていないことに注目
        let result = util.tenTimes { (num1:Int, num2:Int) -> Int in
            return num1 + num2 + num3
        }
        print("test_tenTimes3 result = \(result)") //result = 100
    }
}

MathUtilというクラスの中で、クロージャーを引数にとるメソッドを作りました。
tenTimes()は、引数のクロージャーの返り値を10倍するメソッドです。

MathUtilを使うのは、実際の場面でありそうなViewControllerが使うことにしました。

この投稿の続きを読む »

LINEで送る
Pocket

[iOS] シミュレーターでiCloudのログインができないときはwww.icloud.comにアクセスする

2017/10/17

こんにちは。きんくまです。

テスト用のApple IDを作ります。
そのあとに、シミュレーターでアカウントにログインしようとしてもできないときの話です。

そのときは、以下のサイトにアクセスして、規約に同意すればできます。
https://www.icloud.com/

どうして、これを書いているかというと、このことは2回目だったからですw(1回目に別アカウントでやっていたことを忘れてました)

情報元
>> iOS Simulator – Can’t log in with iCloud

LINEで送る
Pocket

[iOS] フォルメモ 5.1.0 をリリースしました。3万ダウンロードされました。

2017/10/7

こんにちは。きんくまです。

フォルダで管理できるメモ帳、フォルメモの5.1.0をリリースしました。

フォルダと メモ帳。画像がメモに貼れるブラウザつき メモ帳 – フォルメモ

5.0.0ではiPadに対応したりしました

最新の5.1.0は、細かい改善だったり、バグ修正をしました。
そのちょっと前に出した5.0.0では、iPadに対応したりしました。

3万ダウンロードされました

おかげさまで、3万ダウンロードされました。ありがとうございます!

調べてみたら、2016年7月に最初のバージョンをリリースしたみたいです。
>> [iOS | iPhone] 「フォルダで管理するメモ帳」をリリースしました

ユーザーのご意見を取り入れながら少しずつアップデートを重ねて、ダウンロード数が増えていった感じです。
アプリのカテゴリごとのランキングを見るとわかるのですが、アプリの人気があるのは、どちらかというとフォルメモみたいな機能を詰め込むタイプより、もうちょっとシンプルなものが多いです。
それか、WordとかEvernoteみたいな企業がやっているようなもっともっとすごい高機能なもの。あとは無料だけど広告が全くないものとかですね。

なのでフォルメモは正直なところ、位置づけ的に少しどっちつかずな感じだったりしますw
でもアプリとして使いやすそうだったり実装できそうなものを少しずつ追加していった結果がいまのアプリなので、これで良いのかもしれません。

いま次のアップデートでiCloudのバックアップ対応をしようと思って、作り方を調べているところです。
swift3 -> swift4 のバージョンアップの方はなんとか終わりました。

あと、この間ちらっと書いた中国の謎のダウンロードは10月に入ってからほとんどなくなりました。
あれはいったい何だったんでしょうね、、?

というわけで、これからもちょっとずつアップデートしていきたいと思っています。
フォルメモをよろしくお願いします。

フォルダと メモ帳。画像がメモに貼れるブラウザつき メモ帳 – フォルメモ

LINEで送る
Pocket

[iOS] iPhone版作った後、iPad対応のユニバーサルアプリを作ったときはUIAlertControllerのpopoverPresentationControllerをチェックする!

2017/09/26

こんにちは。きんくまです。

ちょっと前にフォルメモのアップデートをしました。その記事は今度別で書こうと思います。
それで、今回のアップデートでiPad対応のユニバーサルアプリにしたのですが、またやってしまいまして。

アラートビューのアクションの場合は、以下の2つを設定しないとアプリが落ちてしまうんです、、。
UIAlertControllerStyle.alertの場合は特に何もしなくても大丈夫です。

//.actionSheetのときは
let alertController:UIAlertController = UIAlertController(title: nil, message: nil, preferredStyle: UIAlertControllerStyle.actionSheet)

//popoverPresentationControllerの2つのプロパティを必ず設定しないとiPadで落ちます!
if let popoverPresentationController = alertController.popoverPresentationController {
    popoverPresentationController.sourceView = photoButton.superview
    popoverPresentationController.sourceRect = photoButton.frame
}

もしくは、アクションを出すbarButtonItemを設定すればOK

alertController.popoverPresentationController?.barButtonItem = shareButton

これ、前に電卓アプリの方でもやってしまったことがあります。
>> [iPhone|iOS] Zippy電卓 – 消費税と割引計算 4.1.1 アップデートしました。popoverPresentationControllerを設定しないとアプリが落ちます

iPad専用だと毎回チェックするから大丈夫なんですが、iPhone版からの変更だと忘れてしまう、、。
一応いま全部チェックしたら漏れがなかったので、また審査に出そうと思います。

LINEで送る
Pocket

[LINEスタンプ] LINEスタンプを作ってみたい。もうすぐ審査に出せそう

2017/09/11

こんにちは。きんくまです。

ふと思い立って、LINEスタンプを作ってみたくなりました。

いろいろと試行錯誤して、なんとかもうすぐ完成しそうです。40個中37個まで描き終わりました。

こんなスタンプです。

ゆるい感じのうさぎを描きました。

上のシミュレーター画像は、下のサイトを利用させていただきました。ありがとうございます!

>> LINEスタンプシミュレータ

LINEスタンプって売れるの?

なんかこの間数えたところ、現在ストアに出ている数は34万個もありましたw(カテゴリプルダウンに出てくる数を単純に合計しました)

なので、まず今から売り始めてもそうとう有名人でもない限り難しそうですね、、。
検索してみたところ、ふつうは売れないっぽいです。

というわけで、もし10個でも売れたらうれしいですね!

気をつけたポイント

なるべくふだん使いしやすくなることです。

あと絵柄はゆるい感じなのですが、絵を全体で見たときの統一感を出すため、線の太さと色、塗りの色などは、何回も調整して決定しました。

もうすぐ審査

あと3枚で描き終わります。そうしたら審査に出します。
最近は5日ほどで審査が終わるみたいなので、その後無事に売り出すことができましたらブログを書きたいです。

ではでは。

LINEで送る
Pocket

[Android|Unity] mac で UnityからAndroid実機デバックしようとしたらエラー

2017/09/1

こんにちは、きんくまです。今回はメモみたいなものです。

最近この本を使ってUnityを勉強しています。
なんか、いまみたらセールしているっぽい。

それで、macからAndroidの実機に転送しようとしたらエラーがでました。

UnityEditor.BuildPlayerWindow+BuildMethodException: Build failed with errors.
  at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (BuildPlayerOptions options) [0x001b9] in /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPlayerWindowBuildMethods.cs:162 
  at UnityEditor.BuildPlayerWindow.CallBuildMethods (Boolean askForBuildLocation, BuildOptions defaultBuildOptions) [0x00050] in /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPlayerWindowBuildMethods.cs:83 
UnityEditor.HostView:OnGUI()

Unityのバージョン
2017.1.0f3

で、調べて見たところどうもこれに関連しているのかな?と思いました。

Build failed with errors. at UnityEditor.BuildPlayer+Default buildMethods how to resolve it ?

JDKのバージョンを1.7から1.8にしたら良いみたい。

Unity > Preferences > External Tools > Android > JDK

修正したら見事に実機に転送できました!!!

iOSの方も実機に転送したら動きました。

ひとまず上の本は一通り終わりました。それで実機で動いているのみたらすごく嬉しかったです。
なんていうか、動いているものは教材用なので、すごく簡単なものなんだけど、なんか嬉しい。
こういう気持ちは久しぶりでした。

サンプルゲームはこんな感じの物理パズルでした。

ではでは。

LINEで送る
Pocket

ページトップへ戻る