技術メモ

技術的なメモを載せていきます。

xcode8.3.x アプリアイコンの登録を簡略化

f:id:unkillonline:20170724144616j:plain

アプリを新規に追加するときなどに都度都度、手作業で 入れ込んでいたIconファイルですが、年々増えていくだけでなく そのわかりにくさも半端じゃないので、簡略化してしまうことに しました。

macOSに標準でついている sips コマンドを使ってベースのアイコンをリサイズして、xcodeのAssetsにjson形式で記述してやることで、簡略化します。

d.hatena.ne.jp

■ 手順

1. ベースのアイコンファイルを準備
2. sipsでリサイズ
3. AssetsのContens.json書き換え

■ 詳細

1. ベースのアイコンファイルを準備

昔は透過のPNGとかが流行りでしたが近年は塗りが基本なので 1024px x 1024px 以上の正方形で背景が透明ではないベースアイコンを用意します。

2. sipsでリサイズ

用意したベースアイコン(名前はIcon.png)を特定のフォルダに入れて以下のコマンドを投入します。

sips -Z 40 Icon.png --out Icon-20@2x.png
sips -Z 40 Icon.png --out Icon-20@2x-1.png
sips -Z 40 Icon.png --out Icon-40@.png
sips -Z 60 Icon.png --out Icon-60@.png
sips -Z 58 Icon.png --out Icon-29@2x.png
sips -Z 58 Icon.png --out Icon-29@2x-1.png
sips -Z 87 Icon.png --out Icon-29@3x.png
sips -Z 80 Icon.png --out Icon-40@2x.png
sips -Z 80 Icon.png --out Icon-40@2x-1.png
sips -Z 120 Icon.png --out Icon-40@3x.png
sips -Z 120 Icon.png --out Icon-60@2x.png
sips -Z 180 Icon.png --out Icon-60@3x.png
sips -Z 20 Icon.png --out Icon-20@.png
sips -Z 29 Icon.png --out Icon-29@.png
sips -Z 76 Icon.png --out Icon-76@.png
sips -Z 152 Icon.png --out Icon-76@2x.png
sips -Z 167 Icon.png --out Icon-83_5@2x.png

ここで、同じサイズ(たとえば 40px x 40px は 20px の x2があるからいいか。。と思っていたのですが、どうやら同じファイル名では登録できないようなので、面倒でも別々のファイル名にしておきます。

3. AssetsのContens.json書き換え

f:id:unkillonline:20170724144256p:plain

対象のプロジェクトの Assets.xcassetsnの下に 生成したアイコンファイル(Icon.png以外)を移動し、ディレクトリ内にあるContens.jsonを以下のように書き換えます。 保存すると瞬時に反映されると思います。

{
  "images" : [
    {
      "size" : "20x20",
      "idiom" : "iphone",
      "filename" : "Icon-20@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "20x20",
      "idiom" : "iphone",
      "filename" : "Icon-60@.png",
      "scale" : "3x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-29@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-29@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "Icon-40@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "Icon-40@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "Icon-60@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "Icon-60@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "20x20",
      "idiom" : "ipad",
      "filename" : "Icon-20@.png",
      "scale" : "1x"
    },
    {
      "size" : "20x20",
      "idiom" : "ipad",
      "filename" : "Icon-20@2x-1.png",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "ipad",
      "filename" : "Icon-29@.png",
      "scale" : "1x"
    },
    {
      "size" : "29x29",
      "idiom" : "ipad",
      "filename" : "Icon-29@2x-1.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "ipad",
      "filename" : "Icon-40@.png",
      "scale" : "1x"
    },
    {
      "size" : "40x40",
      "idiom" : "ipad",
      "filename" : "Icon-40@2x-1.png",
      "scale" : "2x"
    },
    {
      "size" : "76x76",
      "idiom" : "ipad",
      "filename" : "Icon-76@.png",
      "scale" : "1x"
    },
    {
      "size" : "76x76",
      "idiom" : "ipad",
      "filename" : "Icon-76@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "83.5x83.5",
      "idiom" : "ipad",
      "filename" : "Icon-83_5@2x.png",
      "scale" : "2x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

以上です。

iPhone8が出たらまた増えるんだろうか。。

macOS Sierra(10.12.5) + xcode8.3.3 で sqlcipherをコンパイル

f:id:unkillonline:20170714205034p:plain

xcode5.xの頃から使っていたsqlcipher(sqliteの暗号化組み込み実装)を 最新の環境でも仕込んでみます。

officialには情報が乏しいですが、swift3にも組み込めます。

まずは macOSにsqlcipher(コマンドライン)をコンパイルしてみます。

ここの手順でほぼ問題ないですが少しだけ手を入れないとコケます。 tomolog.net

■ 手順

1. sqlcipherをclone(git)
2. コンパイル

 

■ 詳細

1. sqlcipherをclone(git)

ここはさくっと

mkdir work_cipher
cd work_cipher
git clone https://github.com/sqlcipher/sqlcipher.git
2. コンパイル

ここが結構キモで、従来はopensslを落としてきてコンパイルして cryptライブラリを 用意して・・・等々割りと手間でしたが今は一切不要です。

cd sqlcipher
./configure --enable-load-extension --enable-tempstore=yes --with-crypto-lib=commoncrypto CFLAGS="-DSQLITE_HAS_CODEC " LDFLAGS="-framework CoreFoundation -framework security"
make

これで、多少のwarningはでるもののコンパイルされてsqlcipher(コマンド)が生成されます。 ./sqlcipher [db filename] して PRAGMA Key=“暗号化キー"として作業すれば、 暗号化された sqlite の databaseができます。

次回はこれをアプリに組み込んでみたいとおもいます。

GoogleMaps SDK for iOS を手動で最新にする

f:id:unkillonline:20170707185347j:plain

swiftにも組み込めるGoogleMaps SDK for iOSですが、なぜか オフィシャルのスタートページからは常に 「SDK ソースファイル GoogleMaps-2.0.1 をダウンロードします。」と 少し前のstableしかリンクされておらず、組み込んでシュミレータでsdk

呼び出すと…

Google Maps SDK for iOS version: 2.0.26137.0
New version of Google Maps SDK for iOS available: 2.3.30037.0

こんなメッセージを常に見る羽目になります。。

スタートガイド  |  Google Maps SDK for iOS  |  Google Developershttps://developers.google.com/maps/documentation/ios-sdk/start?hl=jadevelopers.google.com

CocoaPods側から入手すると最新になるようなので、手動でも最新版を入手して見ようと思います。 ruby / gem を入れたくない一心でがんばってみます(^^;

  

■ 手順

2. SDKのダウンロード / 展開
3. xcode上での対応
4. build / run

 

■ 詳細

1. CocoaPodsのSpecファイルから最新のSDKバージョンを確認

以下にアクセスして、最も新しいバージョンをクリックし、GoogleMaps.podspec.jsonを開きます。 github.com

2017/7/6 時点では、2.3.1 が最新 f:id:unkillonline:20170706165013p:plain source で始まる項目を探して、その下のURLをメモしておきます。 f:id:unkillonline:20170706165027p:plain  

2. SDKのダウンロード

メモしておいたURLを開いてSDKをダウンロード / 展開

 

3.xcode上での対応

 公式ページに乗っている手順と同一でOKです。 まず、以下のファイルを削除します。(Move to trash してゴミ箱も空に)

GoogleMaps.bundle
GoogleMaps.framework
GoogleMapsCore.framework
GoogleMapsBase.framework
GoogleMapsM4B.framework (Google Maps APIs Premium Plan利用時のみ)

先程展開したzipファイルの中身から、それぞれのframeworkを登録(プロジェクトにドラッグ)します GoogleMaps.framework GoogleMapsCore.framework GoogleMapsBase.framework GoogleMapsM4B.framework (Google Maps APIs Premium Plan利用時のみ)

登録時に Copy items if needed のチェックを忘れずに!!!

登録後、GoogleMaps.framework を右クリックして、[Show In Finder] を選択します。 [GoogleMaps.bundle] を [Resources] フォルダからプロジェクトにドラッグします。 プロンプトが表示されたら、[Copy items into destination group’s folder] が選択されていないことを確認します。

[Product] > [Clean] を選択してプロジェクトのクリーンアップを行った後、[Product] > [Build] を選択して再ビルドを行います。 

 結果:

Google Maps SDK for iOS version: 2.3.30037.0

おつかれさまでした。

 

 

swift3 storyboard で UIScrollviewを実装

swift3 storyboard で UIScrollviewを実装

Objective-Cのころからも使っているUISCrollviewですが、swift3になってどうにも うまくいかなくなったので、うまくいった方法を載せておきます。 (AutoLayoutでクチャクチャにならないようにmix Layoutにします)

具体的な流れとしては、ググるとたくさん出てくる例よりも可能な限り省略します(^^; 特にAutoLayoutはハマるので基本使いません。 AutoresizingMaskだけで頑張ります。 f:id:unkillonline:20170626183507p:plain

■ 手順

下準備: もとのviewcontroller のサイズを広げる

1. Storyboard のスクロールさせたいview controllerにUISrollviewを貼る
2. UIScrollviewの下にScrollviewと同じサイズで、viewを貼りその中に必要な部品を配置。
3. UIScrollviewのAutoresizingMaskを全部チェックして自動伸長にする
4. 該当のviewcontroller.swiftに IBOutlet を設定
5. scrollview の contentOffsetとcontentSizeを設定
6. IBoutlet を Storyboard とつなぐ

■ 詳細

下準備: もとのviewcontroller のサイズを広げる

f:id:unkillonline:20170626190640p:plain

ここでは縦900に。

2. UIScrollviewの下にScrollviewと同じサイズで、viewを貼りその中に必要な部品を配置。

f:id:unkillonline:20170626192152p:plain f:id:unkillonline:20170626191323p:plain

3. UIScrollviewのAutoresizingMaskを全部チェックして自動伸長にする

f:id:unkillonline:20170626191443p:plain

4. 該当のviewcontroller.swiftに IBOutlet を設定
class ViewController: UIViewController,UIScrollViewDelegate {

    @IBOutlet weak var myScrollView: UIScrollView!
    
    override func viewDidLoad() {
5. scrollview の contentOffsetとcontentSizeを設定
        myScrollView.contentOffset = CGPoint.zero
        myScrollView.contentSize = CGSize(width: self.view.frame.size.width, height: 900)

ここでは、横幅はviewサイズで縦900とした。

6. IBoutlet を Storyboard とつなぐ

f:id:unkillonline:20170626191853p:plain

※ contentSizeだけ定義すると、ズレちゃうので、contentOffsetで初期化しておくこと。 てかいつになったら storyboardだけで完結できるんだろうか・・・・・・。

サンプル github.com

Adobe カラーホイール を使う

Adobe カラーホイール を使う

 

adobe社が提供するカラーホイールがものすごく便利なのでご紹介。

Adobe CCユーザじゃなくても使用可能です(AdobeIDがあれば保存もできます)

color.adobe.com

 

RGB の値だけでなく Web 16進コードもわかりやすい。

f:id:unkillonline:20170623173641p:plain

 

例えば親しい類似色を探したいときは

 

5つあるパレットの真ん中に数値を入れると類似色が抽出されます。

f:id:unkillonline:20170623173945p:plain

 

地味に便利な機能がこれ

f:id:unkillonline:20170623174122p:plain

画像から作成

 

例えばSwift3ロゴだと

f:id:unkillonline:20170623174345p:plain

 

 

右上のカラーホイールをクリックすると

f:id:unkillonline:20170623174431p:plain

 

取り出した色のカラーコードが抽出されます。

 

デザイナさんが上げてくる文字の色や枠の色なんかもデザインカンプを

投げ込んで色コード抽出して、このページごと印刷してスクラップブックに

入れておくと悶えるほどに便利です。

近似色でもうちょっと色濃く/薄くとかまるで困らない。

 

 

 

Swift3 で LOG_METHODを使う

Swift3 で LOG_METHOD を使う

 

f:id:unkillonline:20170623170119j:plain

 

 

 

 

■ 概要 

 Objective-C時代に愛用させていただいていた マクロ LOG / LOG_METHOD を

 Swift3向けに書き直しました。

 Swift2.x向けはすでに作っている方がいらっしゃったので、forkさせてもらって

 手直ししてます。 

 

 

Obejective-C版

d.hatena.ne.jp

 
 

 

Swift2.x版

blog.takezou.com

 

 

Swift3版(Swift2.x版のたいぞうさんのに少しだけ手を加えました)

github.com

 

 

で、作り直したものの自分だと微妙にわかりにくかったので、

今はこんなふうにしてます。

 

 Global.swift

-------------------------------------------------------------------------------------------------- 

#if DEBUG

    func LOG_METHOD(funcName:String = #function,lineNum:Int = #line,fullFileName:String = #file ){

        let fileName:String = fullFileName.replacingOccurrences(of: ".*/", with: "", options: String.CompareOptions.regularExpression, range: nil)

            print("[\(fileName)]","- \(funcName)")

    }

    func LOG(msg:Any) {

        print(msg)

    }

    

#else

    func LOG(msg:Any) {}

    func LOG_METHOD() {}

#endif

 

 

 

結果 

-------------------------------------------------------------------------------------------------- 

[TopViewController.swift] - viewDidLoad()

[TopViewController.swift] - db_reload(inmonth:inday:)

 

  

 

 

さくらのレンタルサーバでmysqlをコマンドラインから使う

さくらのレンタルサーバmysqlコマンドラインから使う

f:id:unkillonline:20170707190535p:plain

 

 

 

対象さくらのレンタルサーバは以下の通り

f:id:unkillonline:20170616212715p:plain

 

 

 

■ 手順 

  1) コントロールパネルからDBを新規作成

  2) sshでログインして繋ぐ

 

 

  

1) コントロールパネルからDBを新規作成

さくらのレンタルサーバのコントロールパネルからDBを新規に作成します。

作成するとDBサーバのホスト名が判明します。

(全部DBを消して作り直すとホスト名が変わります)

 

  

1-1) コントロールパネル

 

 

f:id:unkillonline:20170617151001p:plain

メニュー左側のデータベースの設定を押す

 

f:id:unkillonline:20170617151037p:plain

データベースの新規作成を押す

 

 

f:id:unkillonline:20170617151051p:plain

必要事項を記入し作成を押すと上記の様になる。

ここでデータベースのサーバ名がわかる。

 

 

 

f:id:unkillonline:20170617151043p:plain

 

2) sshでログインして繋ぐ

 

sshでサーバにログインした後、以下のコマンドで接続できる。 

 

  

2-1) mysqlへの接続

 

        mysql --host=mysqlxxx.db.sakura.ne.jp --user=foobar --password=xxxxxxxxxxxxxxxxx

 

host= のホスト名は、データベースの作成で確認したホスト名

user= は申込み名(=サブドメイン名) ここでは foobar

password= はデータベースの新規作成で設定した値

 

 

 
ちょっとした変更やDBの中身を見たいなど、(管理ツール:phpmyadmin)を
用いなくても使用できる。
 
 
DBサーバの応答がやたら遅いときには、一度すべてのスキーマを消してしまい
何もない状態から作り直すとDBサーバのホストを切り替えることもできる。