学生かえるエンジニアのブログ

iOSを主にやる勉強中エンジニア。かえるが好き。ピクルスってかわいいよね。

郵便局アプリでのゆうぱっくの発送

郵便局アプリでゆうパックを発送すれば、 ゆうパックスマホ が適用されます。
このとき、「郵便局 / ゆうゆう窓口」または「ロッカー」から差し出せます。
「郵便局 / ゆうゆう窓口」から出す場合は、場所や営業時間が限定的であるため、利便性としては「ロッカー」の方が上です。

実際にロッカーから出してみて、気づきや学びがあったため、差し出し方法について以下にまとめておきます。

アプリを使った発送方法

発送元: 郵便局 / ゆうゆう窓口

人が対応してくれて、即時「集荷」扱いになるので、ここで渡せるなら理想です。
ゆうゆう窓口は通常窓口よりも長時間あいていたり、土日も空いていたりするので、近くにゆうゆう窓口があればなおさら便利です。
ただし、ゆうゆう窓口は比較的大きい店舗にしかなかったり、場所を選びます。

発送元: ロッカー (PUDO)

今回の気付きのメインなのですが、ヤマト営業所などをはじめ、都市部にはかなり設置されている PUDO について、
設置場所が多く 24 時間発送可能なことはメリットではあるものの、 サイズ 100 以下のもの しか発送できません!

発送元: ロッカー (ファミロッカー)

名前の通りファミリーマートのみに配置されています。設置台数は PUDO には劣ります。
しかし最大のメリットが、 ゆうパック最大サイズである 170 まで選択できます。

そしてこれは実体験なのですが、ファミロッカーを操作して最大のロッカーに入れようとしたところ、形状的にロッカーに入らないことがありました。
ロッカー画面の「荷物が入らない」ボタンを押し、結局キャンセルされて、後日窓口から発送するように促されるのかと思ったら、、、
「レジにて荷物を預かります」という案内が表示され、店員に渡すよう に指示された伝票が印刷されました。
荷物と伝票を渡すことで、無事レジで荷物を受け取ってもらえました。

https://www.family.co.jp/services/delivery/locker.html
ファミロッカーの公式サイトを見ると、ちゃんと「ロッカーに入らない場合・満室の場合は、レジで受け取る」ことについての案内もありました。

アプリを使わないコンビニ発送との違い

アプリを使用しなくても、ゆうパックローソン・ミニストップ・セイコーマート から発送できます。(※ ファミマから直接は出せない)
コンビニなので基本は24時間発送でき、便利なのですが、上記の郵便局アプリを経由したパターンと比べて以下の違いがあります。

  • 持込割引 -120円 が適用される ( スマホ割なら -180円 )
  • 同一あて先割引・複数口割引 -60円適用できる
  • 継続利用割引のカウント対象に ならない
  • 郵便局受取割引 ( -100円 ) が 選択できない
  • 伝票を手書きしないといけない

まとめると

伝票 スマホ 郵便局受取割引 継続利用割引 持込割引 同一あて先割引 複数口割引
アプリ発送 スマホ入力 -180 -100 11件目から10%OFF
通常コンビニ発送 手書き -120 -60 -60
  • 「継続利用割引」は、正確には1年間に10件以上の発送があった場合の 翌月 から10%割引
  • 「同一あて先割引」は、過去1年間で同一あて先が記載されたゆうパック伝票のお客様控えがあれば良い
  • 「複数口割引」は、同じあて先に同時に2個以上送る場合に適用
  • 「同一あて先割引」「複数口割引」の同時適用は不可

具体的な利用ケースの想定

アプリ発送 通常コンビニ発送
1箱だけ相手の住所に
(最も標準的なケース)
-180円
継続利用割引カウント
-120円
1箱送りたい、ただ前1度同じ相手に送ったことがある -180円
継続利用割引カウント
-180円
1箱送りたい、相手は郵便局受取で良いと言っている -280円
継続利用割引カウント
-120円
2箱送りたい -180円 * 2
継続利用割引カウント
-180円*2

結論

どのケースを考えても、「金額面」「継続利用割引カウント」「伝票をスマホで事前入力」など ほとんどの場合でアプリ発送を使うべき です。

一方、24時間いつでも発送したい場合、身の回りのロッカーやコンビニの存在に依存します。

  • アプリ発送
    • 100サイズ以下なら PUDO / ファミロッカー から
    • 100サイズ超なら ファミロッカー から
  • 通常コンビニ発送

そして、この記事では「集荷で送りたい場合」「着払いの場合」「法人向け大口発送の場合」などは想定していないので、ご注意下さい!

株式会社の役員の住所を変更登記 (簡単)

2018/10/25 現在の情報です

役員の変更登記を自分で行ったので、書類作成の際のことをメモ代わりに記事にしたいと思います。 おそらく最も簡単だと思います。

自分で行かない場合は委任状などが必要かもしれません。

最初に

基本的に正しい情報は法務局のページにある記載例(PDF)を御覧ください。
時間が経つと書き方が変わったりURLが変更になるかもしれませんのでご注意ください。

書き方

f:id:yuki0n0:20181025045203j:plain:w250 f:id:yuki0n0:20181025045207j:plain:w250

赤字が変更する部分です。

ポイント

そもそも法務局の記載例だと上記と同じ内容が3枚に渡っていますが、2枚に収めても問題ないです。

仕様書様式(テンプレート)ファイル一太郎とWordとPDFで用意されてます。

フリガナ

「カブシキガイシャ」は書かず、カタカナで空白を含めず記入します。 空白がある場合は削除して登録されます。

登記すべき事項

法務局の記載例には「オンラインがどうのこうの」とか書いてます。 ただこの変更登記申請書に直接記入しても問題ないので、画像のように 日付 誰の住所移転か 変更先の住所 を書きましょう。 明確なルールなどないようなので分かれば問題無いです。

登録免許税

資本金が1億円を超える場合は3万円、1億円以下なら1万円です。

印刷

収入印紙貼付台紙 を含め両面印刷などせずに、片面印刷にしてホッチキス等で冊子にして 契印 を押します。 ※ 契印は1ページ目に押した印鑑と同一のもの。

後談

一番なやんだのは「登記すべき事項」でした。
法務局だけじゃなく、法人向けのUFJとかもですが、Macユーザに優しくない。

収入印紙貼付台紙を含め2枚だったので、実は両面印刷して法務局に行きました。
そうしたところ裏には収入印紙ははらないでほしいとのことで、結局裏(収入印紙貼付台紙)には貼らずに表の印の下くらいに貼るよう指示がありました。
つまり貼付台紙など用意しなくとも収入印紙は一応どこに貼っても良いようです。もちろんあったほうがいいことは大前提ですが。

あと、くだらないところに細かい性格なので、
法務局のWordファイルのテンプレートが気に入らなかったので自分で0から書きました。
もしよければ こちらから どうぞ

参考

Mac を iBeacon の ペリフェラル にする

前置き

iOS アプリでビーコン関連のアプリを開発中だったのですが、試したくてもビーコン端末が手元にありませんでした。 そこで Mac をビーコン代わりにできるという話を聞いたのでやってみました。

ただ Mac から アドバタイズ できればいいだけだったので最低限のことしか書いてないです。

環境

macOS High Sierra node npm bleno
10.13.6 8.11.3 6.2.0 0.5.0

方法

1. 初期準備

Node.js の環境を用意したり、npm の使い方を把握するなどの部分は割愛します。各自調べてください。

今回使用するディレクトリ(フォルダ)も用意しといてください。

2. bleno 用意

詳しくは https://github.com/noble/bleno

npm install bleno

3. main.js 用意

ファイル名や中身コードはおまかせしますが、今回は最低限ということで下記のように準備します。

var bleno = require('bleno');

var uuid = 'aaaaaaaabbbbccccddddeeeeeeeeeeee';
var major = 0;
var minor = 0;
var measuredPower = -59;

bleno.on('stateChange', function(state) {
  console.log('on -> stateChange: ' + state);

  if (state === 'poweredOn') {
    bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower);
  }
});

4. 実行

MacBluetooth をオンにしてから。

node main.js

5. スキャン

今回私の目的は、このスキャンする部分を開発中のアプリでテストしたいということだったんですが、

とりあえず本当に Macペリフェラル として動作してるか確証がもてないので出回ってるアプリで試してみます。

検索で最上位に出てきた Beacon Scan とかいうアプリで試して無事検知できました。

知識

説明できるほど理解してるわけではないのですが、今回出てきた値を軽くメモしておきます。

proximity UUID

Beacon端末の UUID 。16進数。
8桁-4桁-4桁-4桁-12桁 と表記される。

major / minor

0 ~ 65535 の値。
例えば major でショッピングモール識別、 minor で店舗識別などグルーピングに利用する。

ペリフェラル (Peripheral)

簡単に言えば 発信機 。対してアプリなどが 受信機(セントラル/Central) という。
Beacon の話というよりは BLE の話。

その他

  • BLE, Beacon, iBeacon などの違い、関係性などは自分で調べてね。
  • iOS 端末2台で ペリフェラル と セントラル にしたりできるみたいです。
  • 逆に Mac を セントラル にして iOSペリフェラル にもできるはず。
  • Android などに関してはしりません。

躓き

bleno の poweredOn

main.js では、stete が poweredOn になってから bleno.startAdvertisingIBeacon をやっていますが、こうしないとエラーが発生します。

bleacon

bleno に似た感じで bleacon というものもありました。
こちらのほうが情報が多かったのですが、全体的に情報が古く、実際に動かしてみてもうまくいきませんでした。(自分のやり方が悪いだけの可能性もあるけど。)
GitHub - sandeepmistry/node-bleacon: A Node.js library for creating, discovering, and configuring iBeacons

Mac App

今回、あくまで iBeacon 端末の代替で手軽にやりたかっただけなのですが、自作で Mac App を作ってもいいと思います。
少し試したりしてたんですが心が折れました。
[iBeacon] Mac を iBeacon 端末にする(Swift3編) | Developers.IO

参考

Xcode で Build 番号インクリメント on CLI

Xcode のプロジェクトで Build 番号を CLI で変更したいときのメモ。

コマンド

Build 番号を取得して、インクリメントして、置き換えてるだけです。
Info.plist のパスは適宜変更してください。

plutilxmllintmacOS にはもともと入ってると思います。

BUILD_NUM=`plutil -extract 'CFBundleVersion' xml1 Info.plist -o - | xmllint --xpath "//string/text()" -`
(( BUILD_NUM++ ))
plutil -replace 'CFBundleVersion' -string $BUILD_NUM Info.plist

背景

CI から App Store Connect にアップロードしようとしてて、同一ビルド番号は受け付けないので、CI 上でインクリメントもしようという。

CI 上ではインクリメントしたあとに git add/commit/push もやってます。

後記

plutil で素直に値だけ取り出せればいいのに。

やり方の選択肢は死ぬほどあるでしょうけど、

別のやり方で良さげな方法があったらコメントなどで教えてください。

IPA ファイルを作成して DeployGate へアップロードまでを自動で on TravisCI

個人制作のアプリで、github に push したら、TravisCI で ipa ファイルを作成して DeployGate にアップロードするまでの流れを自動で行うようにしました。

わりと手こずったりしたので、備忘のためにも記事にしておきます。

前提

  • p12 ファイルなどを扱うので全て自己責任で注意して行ってください。
  • 今回は ipa 作成 〜 deploygate へアップロード の流れにフォーカスしているので、その他の詳しい説明 (プロファイルの作成方法、DeployGate・TravisCIの使用方法等) は割愛します。

バージョンや状況

Xcode CI
9.3 TravisCI
  • 記事執筆日時: 2018/04/22
  • Manual signing を使用しています
  • CocoapodsCarthage も使っています
  • 今回自分が試したプロジェクトには TodayExtensionwatchOS系 の target が含まれています

.travis.yml ファイル

細かな手順などは後に書いてます。
便宜上最低限の記述のみにしています。

language: objective-c
osx_image: xcode9.3

script:
  # keychain
  - sudo security import <証明書>.cer -k /Library/Keychains/System.keychain -T /usr/bin/codesign
  - sudo security import <証明書>.p12 -k /Library/Keychains/System.keychain -P <PASSWORD> -T /usr/bin/codesign

  # provisioning profile
  - mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
  - mv <PPFILE_PATH> ~/Library/MobileDevice/Provisioning\ Profiles

  # xcodebuild
  - xcodebuild -workspace <PROJECTNAME>.xcworkspace -scheme <SCHEME_NAME> -configuration <Release> archive -archivePath <ARCHIVE_PATH>
  - xcodebuild -exportArchive -archivePath <ARCHIVE_PATH>.xcarchive -exportPath ./build -exportOptionsPlist <PLIST_PATH>.plist

  # deploygate
  - curl -f -F "token=<API_KEY>" -F "file=@build/<IPA_FILE>.ipa" https://deploygate.com/api/users/<OWNER>/apps

手順

1. cer, p12 ファイルの用意

既に用意できてる場合は大丈夫です。ない場合は下記の3つの手段のいずれかで用意してください。
p12 ファイルを書き出す際にはパスワードを設定しますので、忘れないようにしてください。

用意したファイルを git 管理下に移動してください。

  • Mac の キーチェーンアクセス から書き出す (for cer & p12)

キーチェーンアクセス.app を開いて、該当の証明書を右クリックし、cerとp12ファイルを書き出します。

  • Xcode から書き出す (for p12)

Preferences > Accounts > 該当のアカウント > ManageCertificates > 該当の証明書を右クリック > Export Certificate

  • Apple の Developer サイトからダウンロード (for cer)

こちら にアクセスし、該当の cer ファイルをダウンロードしてください。

コマンドの説明

TravisCI で下記を実行しています。
<証明書><PASSWORD> は書き換えてください。

sudo security import <証明書>.cer -k /Library/Keychains/System.keychain -T /usr/bin/codesign
sudo security import <証明書>.p12 -k /Library/Keychains/System.keychain -P <PASSWORD> -T /usr/bin/codesign

ログの24行目あたりに下記のように記されています。
本来WWDRCA証明書が必要なのですが、TravisCI上の macOS の Keychain には既に登録されています。 なのでこの Keychain を使用しています。

Fix WWDRCA Certificate
Unable to delete certificate matching "<省略>"security: AppleWWDRCA.cer: already in /Library/Keychains/System.keychain

2. ProvisioningProfile を用意

Xcode の signing 設定に指定している Provisioning Profile を用意します。
拡張子は.mobileprovisionです。
複数の target を用いているプロジェクトではその数分 Provisiong Profile も必要です。
既に用意できてる場合は大丈夫ですが、ない場合下記の2つの手段から用意してください。

用意したファイルは git 管理下に移動して下さい。

  • Apple の Developer サイトからダウンロード

ProvisioningProfile はここで作成します。既に作られている場合はダウンロードしてください。

  • Xcode の管理場所から持ち出す

Xcodeでは ~/Library/MobileDevice/Provisioning Profiles の場所で全て管理されています。
この中から該当のファイルをコピーして下さい。

コマンドの説明

-p オプションを付けて ProvisioningProfile を置くべきディレクトリを用意し、ファイルをそこまで移動しましょう。

mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
mv <PPFILE_PATH> ~/Library/MobileDevice/Provisioning\ Profiles

3. xcodebuild で ipa 作成

1行目で archive を作成し、2行目で ipa を作成します。
<> 内はご自分のものに書き換えてください。

xcodebuild -workspace <PROJECTNAME>.xcworkspace -scheme <SCHEME_NAME> -configuration <Release> archive -archivePath <ARCHIVE_PATH>
xcodebuild -exportArchive -archivePath <ARCHIVE_PATH>.xcarchive -exportPath ./build -exportOptionsPlist <PLIST_PATH>.plist

archive 作成

archive 作成コマンドを実行すると拡張子 .xcarchive のファイルが作成されます。
今回私のプロジェクトではcocoapodsを使用していたので workspace オプションで行っていますが、各自でコマンドは調整してください。
<ARCHIVE_PATH> は拡張子を含めず書きます。

ipa 書き出し

ipa ファイル作成時には、オプションを記述した plist ファイルが必要です。
下記に最低限を示しておきますが、詳しくは こちら が参考になります。
Xcode 上で管理すれば編集しやすいと思います。

作成した plist ファイルの場所を <PLIST_PATH> に記述しましょう。

<?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>method</key>
    <string>ad-hoc</string>
    <key>compileBitcode</key>
    <false/>
    <key>provisioningProfiles</key>
    <dict>
        <key>BUNDLE ID をここに</key>
        <string>Provisioning Profile の名前をここに</string>
    </dict>
</dict>
</plist>

4. DeployGate へアップロード

DeployGate の プロフィールページ の下部に API Key があります。
<OWNER> は あなたのユーザ名です。

公式ドキュメント を参考にして下さい。

curl -f -F "token=<API_KEY>" -F "file=@build/<IPA_FILE>.ipa" https://deploygate.com/api/users/<OWNER>/apps

補足

証明書などの扱い

.p12cer などの扱いは各自で注意してください。
特に.p12秘密鍵を含んでいるので注意してください。

TravisCI でのファイルの暗号化は 公式の説明 を参考にしてください。

パスワードの扱い

パスワードや API Key を .travis.yml にべた書きするのは避けるべきです。

https://travis-ci.com/<UserName>/<ProjectName>/settingsEnvironment Variables を使用する、travis encrypt コマンドを利用する、などなんらか別の安全な方法で行うべきです。

ライブラリ管理

carthagecocoapods を使用している場合は当然ながら install コマンド等を .travis.yml に書いてください。
キャッシュの設定などもするといいと思います。

その他

  • 私は xcpretty を使用していますが今回は省略して記述しています。
  • 当然 Provisioning Profile には実行したい端末の UDID が含まれてないといけません。

参考

後記

人によって環境が結構異なるでしょうし、詳しくなければ xcodebuild の認証周りで手こずる可能性が高いなど、一筋縄ではいかないことが多いと思います。
他のサイトなども参考にしながら、沢山試行錯誤しながら、頑張ってください。

間違いや感想、質問等、お気軽コメントどうぞ!

PDFKit で https が表示できない

Macには以前からあったようですが、iOSではiOS11から PDFKit が追加されました。

PDFKit の細かな話は自分で調べてもらうとして、今回は https://... のPDFが表示されず、対応策がネット上に英語の情報しか見つからなかったので書いておきます。

前提

Xcode Swift iOS
9.3 4.1 11.3

コード (結論)

let url = URL(string: "https://www.apple.com/business/docs/iOS_Security_Guide.pdf")!
let data = try! Data(contentsOf: url)
pdfView.document = PDFDocument(data: data)

注意

  • 便宜上 force unwrap してますが良くないので適宜修正して下さい
  • pdfViewPDFViewインスタンス

原因

PDFDocument のイニシャライズ時は通常 PDFDocument.init?(url:) を使うと思いますが、この時 https:// のurlの場合nilが返されます。

PDFDocument(url: URL(string: "http://...")!)  // PDFDocument instance returned
PDFDocument(url: URL(string: "https://...")!) // nil returned

さらに PDFViewdocument プロパティが PDFDocument? というようにnilを許容しているので、なにも表示されない原因に気付きにくいです。

// nothing happens
pdfView.document = PDFDocument(url: URL(string: "https://...")!)

詳しい事などは 参考 を参考にしてください。

参考

後記

もっと英語できるようになりたい(ってかれこれ6年くらいいってる)

Chromeのユーザー画像変更

Chrome を愛用してます。
複数ユーザーの機能があるので他のブラウザには乗り換えれません。

各ユーザのアバター画像が意外とすんなり変更できなかったので、書き残しておきます。

f:id:yuki0n0:20180320133118p:plain

前提

macOS Chrome
HighSierra 10.13.3 65.0.3325.162

手順 ~ ChromeGoogleアカウントでログインしてる編 ~

ChromeGoogleアカウント を紐付けてブックマークやパスワードの同期機能使ってる人向け。

1. Googleアカウント にプロフィール画像設定

https://aboutme.google.com/ にアクセスして、プロフィール画像を設定しましょう。

2. Chromeにログイン

chrome://settings すでに Chrome にログインしているなら、一度ログアウトして、再度ユーザを追加してログインします。

3. プロフィール画像を消す

手順1で設定したプロフィール画像はあなたの Googleアカウント での公開情報となってしまいます。 今回は Chrome 上のアバター画像を変更したいだけですので、 Googleアカウント から画像を削除します。

https://get.google.com/albumarchive/ ここから先程アップロードした画像のページに行き、削除してください。

そのままでいい人はそのままで、以前別のプロフィール画像を使っていた人はもう一度手順1で設定しなおします。

手順 ~ ChromeGoogleアカウントでログインしてない編 ~

1. 画像用意

アイコンにしたい画像を用意しましょう。正方形の PNG がいいと思います。

ファイル名は Google Profile Picture.png としておきます。

2. 画像を移動

Google Profile Picture.png~/Library/Application Support/Google/Chrome/Default の中に移動してください。

ユーザーのフォルダについて

パスの Default は変更したいユーザのフォルダに置き換えてください。

Chrome の各ユーザーの設定情報などは Default Profile 1 Profile 2 ... というフォルダに格納されています。

※ 自分が設定した名前のフォルダ名にはなっていません。

3. Local State ファイルを編集

~/Library/Application Support/Google/Chrome/Local State 場所はこちら。
拡張子はありませんがただの json ファイルです。

この json"profile" > "info_cache" > "Default" に下記を追記/変更してください。

"gaia_picture_file_name": "Google Profile Picture.png"
"use_gaia_picture": true

編集時の注意

  • 編集前に Chrome は終了しておきましょう。
  • json の要素 Default は先述したように自分が変更したいユーザーに置き換えてください。
  • Local State ファイルのjsonは改行されていない1行のファイルなので適宜うまいことしてください。

完了

下記のようなユーザ選択画面で画像を変更できたら成功です。

f:id:yuki0n0:20180320133148p:plain:w200  f:id:yuki0n0:20180320133152p:plain:w200
f:id:yuki0n0:20180320133855p:plain

補足

  • Windows でできるかわかりませんが、同じことをやるとしたらパスが違うようです。あっているかわかりませんがここっぽいです。~/AppData/Local/Google/Chrome/User Data/

参考

後記

なんか別にこんな記事よりもっと書きたいことあるのに...

モチベーションと時間の問題。

Qiita にも書いてみた。