Archive するたびに Splunk Mint (旧 Bugsense) に自動で dSYM ファイルをアップロードする

追記: この記事は古い情報です。現在この記事の方法ではアップロードできません。

最新の SplunkMint-iOS をインストールし、以下の記事に従って設定してください。(ただし、アーカイブ時ではなくビルド時にアプロードされます)

Configure your project for symbolication - Splunk Documentation

API キーとトークンの取得

API キーとトークンは Splunk Mint のサイトにログインして、それぞれ以下のページから取得する。

  • API キー
    • プロジェクトの Settings > General
  • API トーク
    • Account > Account Info > My Info
Xcode プロジェクトの設定

Xcodeスキーマ(Xcode 上バーのデバッグ停止ボタンの右) をクリックして Edit Scheme... を選択する。

f:id:suer:20150609144908p:plain

Archive の Post-actions を開き、+ をクリックして New Run Script Action を選択する。

f:id:suer:20150609145221p:plain

Shell は /bin/shスクリプトは以下のとおり

API_KEY="API キー"
API_TOKEN="API トークン"
APP_NAME=アプリ名
rm -f $APP_NAME.app.dSYM.zip
zip -r $APP_NAME.app.dSYM.zip "${ARCHIVE_DSYMS_PATH}/$APP_NAME.app.dSYM"
curl -F file=@"$APP_NAME.app.dSYM.zip" --header "X-Splunk-Mint-apikey: $API_KEY"  --header "X-Splunk-Mint-Auth-Token: $API_TOKEN" "https://symbolicator.splkmobile.com/upload/dsym" -i
API キーやトークンを Git の管理対象に入れたく無い場合

プロジェクトルートディレクトリに mint.plist というファイルを置いて、.gitignore で管理対象にならないようにする。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>API_KEY</key>
<string>API キー</string>
<key>API_TOKEN</key>
<string>API トークン</string>
</dict>
</plist>

以下のようなスクリプトを登録する

APP_NAME="アプリ名"
API_KEY=$(/usr/libexec/PlistBuddy -c "Print API_KEY" $(dirname ${WORKSPACE_PATH})/mint.plist)
API_TOKEN=$(/usr/libexec/PlistBuddy -c "Print API_TOKEN" $(dirname ${WORKSPACE_PATH})/mint.plist)

rm -f $APP_NAME.app.dSYM.zip
zip -r $APP_NAME.app.dSYM.zip "${ARCHIVE_DSYMS_PATH}/$APP_NAME.app.dSYM"
curl -F file=@"$APP_NAME.app.dSYM.zip" --header "X-Splunk-Mint-apikey: ${API_KEY}"  --header "X-Splunk-Mint-Auth-Token: ${API_TOKEN}  "https://symbolicator.splkmobile.com/upload/dsym" -i

管理者権限でログインしているかどうかをひと目で分かるようにする Redmine プラグインを作った

Redmine の管理者と一般ユーザを分けていると、よくある失敗として、
管理者権限でログインしたままでいることを忘れたままチケットを作成・更新してしまう、
ということがあります。

そうすると、チケットの更新者が自分じゃなくて管理者ユーザになってしまって悲しい思いをします。

そういった事故を減らすために管理者でログインしているかどうかをテーマでひと目で分かるようにするプラグインを作りました。

環境

Redmine 3.0.0

機能

管理者ユーザでログインしている時のみ <body> タグの class に "admin" を追加します。

この class を利用したテーマを自作することで管理者と一般ユーザの画面の見た目を切り替えることができるようになります。

利用手順

テーマを作成します。

例えば、public/themes/admin/stylesheets/application.css を以下のように作成します。

@import url(../../../stylesheets/application.css);
body.admin #top-menu { background-color: #f0908d; }
body.admin #header { background-color: #f2a0a1; }

管理画面で作成したテーマを指定します。


この例の場合は、一般ユーザでログインした場合は通常の画面

管理者でログインした場合は別の見た目になります。

これで誤ったアカウントでチケットを更新する事故をかなり防げるようになります。

まとめ
  • 管理者でログインしているかどうかを判別するために画面を切り替えるプラグインを作った
  • プラグインを作って class 属性を操作するのは簡単な割にできることが広がっていい感じ

ステータスバーの文字色を白くする

環境: iOS SDK 8.1

ナビゲーションバーの背景色を変更すると、デフォルトではステータスバーの時刻とかバッテリー残量表示の文字が見づらくなる。

背景色にあった文字色に変更する。

手順

info.plist に以下の行を追加

  • View controller-based status bar appearance
  • Boolean
  • NO

コードでステータスバーのスタイルを変更。

// Appdelegate.swift
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.BlackOpaque

Swift でクラス名の取得

環境: Swift version 1.1 (swift-600.0.56.1)

NSStringFromClass を使用すると、 "プロジェクト名.クラス名" という文字列が取得できる。

class TestClass {}

NSStringFromClass(TestClass().dynamicType)
NSStringFromClass(TestClass)

MagicalRecord でシミュレータ実行時に作成された sqlite のデータベースファイルを探す

環境: iOS SDK8.1

MagicalRecord で

MagicalRecord.setupCoreDataStackWithAutoMigratingSqliteStoreNamed("database.sqlite")

のように実行した場合、シミュレータでは

~/Library/Developer/CoreSimulator/Devices/デバイスID

以下に作成される。

デバイス ID が分からないことが多いので find で探す。

$ find ~/Library/Developer/CoreSimulator/Devices/ -name "database.sqlite"