個人アプリ開発者のツライところ

 

 

個人でアプリを制作している。

 

会社員とは比較にならないほど収入は高い。

好きなことだけをして生きてるのでストレスも少なめ。

だけど〜、悪いところ・ツライところもあるっちゃある。

そんな記事を書いてみる。

 

 

 

1. 社会的信用がない

 

クレジットカードを更新するときに自営業者は審査が厳しい。

勤務先に固定電話がないという理由で契約を断られたり。

昼間に散歩していると近所の人に怪しまれたり。

 

 

 

2. いわれのない誹謗中傷

 

匿名さんの悪意。

嫌がらせメール攻撃。

レビュー荒らし。

脅迫されることもある。

住所も公開しているので強盗や放火の可能性も。

 

 

 

3. 孤独の寂しさ

 

人と会う機会がない。

声の出し方を忘れる。

特に独身者は注意。

一度金持ちになってしまうと金目当ての人が集まってくるのでパートナー探しが大変になる。

 

 

 

4. 税金が高い

 

所得税が高い

住民税が高い

売り上げが1000万円超えてる場合は消費税の納税義務も発生する。

稼いだ金額の半分近くを税金で持っていかれます。

 

 

 

 

5. 将来不安

 

アプリなんて所詮流行りもの。

10年前にはなかった職業なので10年後にはどうなっているかわからない。

 

 

 

 

 

今から個人アプリ開発者になろうって人もあんまりいないと思うけど。

 

 

 

 

 

 

SwiftyStoreKit で iOS AppStoreプロモーション を実装してみた

 

 

個人アプリ開発者に優しいSwiftyStoreKitですが、AppStoreプロモーション機能を組み込むために今ひとつ不明な点が。

 


アプリの状況

 

  • 無料アプリ(機能制限あり)
  • アプリ内課金で機能制限を外すことができる
  • 購入とリストアはSwiftyStoreKitで実装済み。
  • アイテムのダウンロードは無し。UserDefaultで購入済みフラグを管理してるだけ。
  • レシート管理はしてない。

 

 

 

まずは基本


AppDelegate生成時(didFinishLaunchingWithOptions)にSwityStoreKitに頼んどく

SwiftyStoreKit.shouldAddStorePaymentHandler = { payment, product in

    return true    //iOSにぜーんぶおまかせ

}

 

たったこれだけでAppStoreアプリからのリンクで購入可能にしてくれる。

AppStoreに表示されたアイテムをタップするとアプリが起動して購入フローに入る仕組み。

購入完了するまでアップルがよしなにしてくれる。

上記のブロックが呼ばれるタイミングは「AppStoreのリンクを踏んでアプリが起動した時」だった。

 

 


購入完了通知は?

 

購入(リストア)はアップルが面倒見てくれる。

だけど購入完了(リストア完了)の通知はライブラリには実装されてないようだ。

SwiftyStoreKitの公式やサンプルコードにも記述がない。

とりあえずUserDefaultに永続化したいだけなんだけど、今のところ自力でやるしかなさそう。

 

 

 

オレオレ実装

 

深い知識なしでやってるので間違ってても保証せん。

import SwiftyStoreKit

 

//AppDelegate # didFinishLaunchingWithOptions

SwiftyStoreKit.shouldAddStorePaymentHandler = { payment, product in

    SKPaymentQueue.default().add(self)    //IAB状況の監視を開始

    return true

}

 

extension AppDelegate: SKPaymentTransactionObserver {

    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {       

        for transaction in transactions {

            switch transaction.transactionState {

                case .purchasing: break

                case .deferred: break

                case .failed:  break

                case .purchased: handlePurchase(transaction.payment.productIdentifier)

                case .restored: handlePurchase(transaction.payment.productIdentifier)                        }

        }

    }

 

    private func handlePurchase(_ productId: String) {

        if productId == kProductId {

             //TODO ここでUserDefaultに永続化なりなんなり

             SKPaymentQueue.default().remove(self) //監視を終了       

        }

    }

}

 

 

 

トランザクション終了をiOSに通知しなきゃダメなんだっけ?

とりあえず大丈夫そうだけど。

SwiftyStoreKitで簡単にコールバック受けられるようになったら嬉しいなー

 

 

 

 

エアアジアの決済で支払い手数料を安くしたい

AirAsiaがセールやってた。 安い。

 

エアアジアなら、バンコクまで1万円

 

成田→バンコクが9900円。

四人で往復しても8万円か。

よし贅沢に家族旅行としよー( ^∀^)

 

 

 

ところがどっこい支払い手数料が高い

 

決済しようと思ったらクレジットカードの支払い手数料が6400円だって。

4人で往復なので、一路線800円か。高いね。

クレジットカードが高いなら他の手段を探す。

 

 

 

 

銀聯カードなら

 

ぎんれんかーどなら、6400円が600円になるとのこと。

こんなこともあろうかと先日「銀聯カード」を三井住友銀行で作っておいたのだ。

早速決済してみようと思ったが

 

 

 

 

非対応

 

 

 

 

調べてみると店頭ショッピング専用カードだった。

イラネ

パンダカード、ゴミ箱へ。

 

 

 

他に方法ないの?

 

諦めてVISAで決済しちゃった。

6400円払いました。

誰か、良い方法教えてくり

 

 

 

 

 

 

 

SwiftyStoreKitが神だった件

 

Andrea Bizzotto さんが公開しているライブラリがとっても使いやすくて感動したので紹介する。

 

 

github.com

 

 

今まで、iOSアプリのアプリ内課金はオレオレライブラリで実装してたのだが、たまーに「課金できなかったぞ」と怒られることがあったり。

 

 

どうやらSDKのアップデートの度にビミョーに変わってきてたり。

例えばファミリー共有が機能追加されてdeferedステータスとか。

iOS11からAppPromotionが追加されてたり。

よく考えたらComplete Transactionsなんてオレオレライブラリでは実装してなかったわ。

 

 

で、

 

 

いい感じのライブラリ探して辿り着いたのが、SwiftyStoreKit

 

これ、楽だわ笑

ブロックで書けるのでまとまっててわかりやすい。

 

 

iOS11からのAppプロモーションにも対応してますね。

これに引っ越しさせていただきます!

おすすめです!

 

 

 

 

 

うつ病を克服したのだよ

 

 

ずいぶん前のこと。

自分はとあるブラック企業で雇われ従業員やってて、ある日精神科で「うつ」との診断を受けた。

 

 

 

うつ病の診断を受ける

 

うつかどうかはお医者さんが決める。

いい加減なものでお医者さんがクロと言えばクロなんだな。

うつと診断された場合、診断書を発行してくれます。

診断書のお値段は3000円。

これさえゲットできれば色々アレです。おトクです。

がんばってうつ病アピールしましょう。

 

 

 

 

 

うつのクスリ

 

しばらく会社を休み、精神科で処方された薬を飲んで静養していた。

この薬なんだけど、正直あんましよくない。

まずい。

ムスコ勃たなくなる。

薬のせいでうつが悪化してくように感じた。

こんなんじゃまずい。

なんとかせねば。

 

 

 

 

 

復活に効いた方法

 

リハビリと小遣い稼ぎを兼ねて日雇いのバイトに行ったりしてた。

肉体労働。

運動は大事よね。

あとは温泉ね。

大麻持参してよく行ってた。

対症療法じゃなくて免疫系に効く感じ。

マリファナと温泉、これ最高。

 

 

 

 

 

今なら

ただ、日本は大麻後進国なのでマリファナを直接扱うのはヤヴァイ。

私はもういい大人なんだから法は守る。吸うのは海外だけにしてる。

まあ今国内ならCBDでしょうね。

ググってみるとガン患者とかに人気みたいね。

お値段そこそこするとは言え、代替え医療の中では安い方だ。

リキッドで摂取するのが効率良いようだ。

 

 

 

 

うつ病のみんな〜

がんがれ

 

俺もがんがるー

 

PhotoKitでカメラロールから画像を取得できないケース

 

 

 

iOSアプリを開発している。

カメラロールから画像データを取得したい。

このAPIを使う。

 

PhotoKit -> PHImageManager

 

func requestImage(for: PHAsset, targetSize: CGSize, contentMode: PHImageContentMode, options: PHImageRequestOptions?, resultHandler: (UIImage?, [AnyHashable : Any]?) -> Void)

 

 

 

通常はこれで良いのだが、なぜか画像がnilで戻ってくるケースがあった。

handlerのinfoを覗くと当該AssetのPHImageResultIsInCloudKeyがtrueになっている。

つまりiCloudにあるってことか。

 

 

iOSのストレージ最適化機能が何か変なことをしてるみたいだ。

画像を共有しているアップルIDから自分の端末にダウンロードしたのだが、実際にはサムネイルくらいしか入ってないようだ。

 

試しにGooglePhotosで該当画像のメタデータを見ると、ファイルサイズが0になっている。

Googleよおまえもか。

ファイルの実態はiCloudにあるのね。

 

 

 

 

解決方法

 

クラウドから取ってくるしかあるまい

 

let opts = PHImageRequestOptions()

opts.isNetworkAccessAllowed = true

 

 

 

 

 

 

 

参考

 

PHImageManager - Photos | Apple Developer Documentation

 

 

stackoverflow.com

 

 

 

 

 

 

 

インド政府がやってる大麻販売店を紹介しますよ

 

 

インドではマリファナが売られています。

しかもインド政府がお店を出してます(笑

写真を撮ってきたので紹介しますね〜

 

 

 

カジュラーホー

f:id:hatesatekite:20171013114203j:plain

まずはマディヤ・プラデーシュ州のカジュラーホーという村で見つけたマリファナショップです。

黄色い旗が立ってるところがお店。

 

看板 を拡大。

f:id:hatesatekite:20171013114231j:plain

 

 शासकीय भांग की दुकान (シャサキーエ バング キ ドゥカーン) と書いてあります。

意味は 「政府の-大麻-の-店」

 

 

 

バススタンドの西隣、寂れたモールのテナントに入居。

ツーリストにも売ってくれますよ。

 

 

 

 

 

 

 

 

バナーラス

f:id:hatesatekite:20171013114405j:plain

お次はウッタル・プラデーシュ州のバナーラスで発見したお店です。

写真中央の小さな店がそれ。

 

f:id:hatesatekite:20171013114457j:plain

 

汚ったないと思うでしょうがインドだからこんなもんです (笑)

सरकारी भांग की दुकान (サルカーリー バング キ ドゥカーン = 政府のマリファナショップ)

よく見ると「GOVERMENT BHANG SHOP」と英語表記もありますね。

 サルカーリーもシャサキエと同じで「政府の」という意味です。

 

こちらのお店は大麻の葉を潰して丸めたマリファナ団子を売っていました。

インド人は団子を買うとその場で口にポイッと入れて食べてましたよ。

味ははっきり言ってマズい。

下の地図はおおまかな場所ですが、ゴドウリヤー交差点から南へ下っていくと左手に見えます。

地名はソナルプラです。

 

 

 

 

 

 

 

 

 

プリー

f:id:hatesatekite:20171013114641j:plain

最後はオリッサ州のプリーです。

 

f:id:hatesatekite:20171013114658j:plain

もう、英語で書いちゃってますね (笑))

GOVT BHANGA SHOP (政府マリファナショップ)

地元の客で賑わっていましたよ。

 

通常は小窓から手だけ入れて受け渡しするのですが、外国人ツーリストなら喜んで中に招き入れてくれますよ。

 

 

 

グーグルマップにちゃんと登録されてますね。

調剤薬局って書いてあった。

有名な日本人宿「サンタナ」のすぐ近くです。

ハッピーは買えます。調剤薬局で。

 

 

 

 

 

 

 

バング( भांग / Bhang ) とは

 

The leaves and flower tops of cannabis, used as a narcotic.

 

 だそうです。

なども手に入ります。

最高ですね!

 

 

 

 

 

 

 

インドでは売人が「ジャパーニー、ハッパハッパ、ヤスイヨ!」と声をかけてきます。

でも本当に安いのはこのような政府のお店です。

インド政府お墨付きのお店なら安心ですね!

安心!

安全! 

最高! 

 

 

 

 

 

 

さて、旅行者でもこんなに簡単に見つかるのだからインドにはきっとたくさんのマリファナショップがあるんでしょうね!

 

インド人と仲良くなるには大麻から。

郷にいれば郷に従え

それではみなさんもインドを楽しんでくださいね!