会社概要

SwiftyJson

JSONデータのパースライブラリです。

CocoapodsのPodfileのメタ情報は

platform :ios, 'OSバージョン'
use_frameworks! target 'アプリ名' do
pod 'SwiftyJSON'
end

そしてターミナルから

$ pod install

Swiftファイル上での初期化は

import SwiftyJSON

let json = JSON(data: dataFromNetworking)

let json = JSON(jsonObject)

if let dataFromString = jsonString.data(using: .utf8, allowLossyConversion: false) {
let json = JSON(data: dataFromString)
}


となり、JSONデータのアサイン例は

// doubleをアレイから取得
let name = json[0].double

// stringをマルチアレイから取得
let name = json[1]["list"][2]["name"].string

// JSON Dictionaryからstringを取得
let name = json["name"].stringValue

// Loopの場合
for (index,subJson):(String, JSON) in json {
//何か実行
}

//エラーの場合、アプトプット
let json = JSON(["name", "age"])
if let name = json[999].string {
//何か実行
} else {
print(json[999].error) // "Array[999] is out of bounds"
}

詳細は https://github.com/SwiftyJSON/SwiftyJSON

Alamorefire

HTTPデータ通信のライブラリです。

CocoapodsのPodfileのメタ情報は

platform :ios, 'OSバージョン'
use_frameworks! target 'アプリ名' do
pod 'Alamofire'
end


そしてターミナルから

$ pod install Swift

フィル上での初期化は

import Alamofire

Alamofireを使ってJSONファイルをダウンロードそしてパースする

Alamofire.request("URL文字列").responseJSON { response in

print(response.request) // URLリクエスト
print(response.response) // HTTP URLレスポンス
print(response.data) // サーバデータ
print(response.result) // ダウンロードの結果 Sucess/Failure if let JSON = response.result.value {
print("JSON: \(JSON)")
}

ファイルをダウンロードするには

Alamofire.download(URL文字列, to: destination)
.response { response in
let filepath: String = (response.destinationURL?.path)!
// テキストは、UTF8にエンコードする
self.TextView.text = try? String(contentsOfFile:(response.destinationURL?.path)!, encoding: String.Encoding.utf8)

// 既に同名のファイルが端末に存在すると(2回目のダウンロードから必ず発生)エラーが発生するので、一旦ファイルを消してからサーバからダウンロードする
if FileManager.default.fileExists(atPath: (response.destinationURL?.path)!) {
do{
try FileManager.default.removeItem(atPath: (response.destinationURL?.path)!) // 前に残ったファイルを削除
}catch{
print("Handle Exception")
}
}
}

詳細は https://github.com/Alamofire/Alamofire

iOS-Chart


iOS-Chartは人気グラフィックライブラリーなのですが、マニュアルがないのがネック。試行錯誤したなかの情報も含めて共有します。

CocoapodsのPodfileのメタ情報は

platform :ios, 'OSバージョン'
use_frameworks! target 'アプリ名' do
pod 'Charts'
end

そしてターミナルから

$ pod install

バーチャート作成のコードサンプルは

let y2Vals: [Double] = [ 900, 800, 1000, 500, 800, 900, 300, 400, 100, 1200, 500, 100]
xduration= ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]

var entries2 = [BarChartDataEntry]()

for (i, v) in y2Vals.enumerated() {
let entry = BarChartDataEntry()
entry.x = Double(i)
entry.y = v
entry.data = xduration as AnyObject //x軸に文字列を指定する場合
entries2.append(entry)
}

let set2 = BarChartDataSet(values: entries2, label: "2016")
set2.setColor(UIColor.flatSkyBlue)

// チャートのスタイルの設定

BarChartView.xAxis.labelPosition = .bottom
BarChartView.drawValueAboveBarEnabled = true
BarChartView.xAxis.drawGridLinesEnabled = false
BarChartView.leftAxis.drawGridLinesEnabled = true
BarChartView.rightAxis.drawGridLinesEnabled = false
BarChartView.leftAxis.drawLabelsEnabled = true
BarChartView.rightAxis.drawLabelsEnabled = false

// チャートの間隔の調整

let data = BarChartData(dataSets: dataSets) let groupSpace = 0.25
let barSpace = 0.0
let barWidth = 0.3
let groupCount = self.xdurationtype.count
let startYear = 0

data.barWidth = barWidth;
BarChartView.xAxis.axisMinimum = Double(startYear)
let gg = data.groupWidth(groupSpace: groupSpace, barSpace: barSpace)
BarChartView.xAxis.axisMaximum = Double(startYear) + gg * Double(groupCount)
data.groupBars(fromX: Double(startYear), groupSpace: groupSpace, barSpace: barSpace)
BarChartView.notifyDataSetChanged()

// グラフ上のデータを非表示

let chartData = BarChartData()
chartData.addDataSet(set)
chartData.setDrawValues(false)

// オリエンテーション、デバイスタイプによりDescriptionの位置を変更

switch UIDevice.current.userInterfaceIdiom { // Detect Device Type and Orientation for Description location

case .phone:
if UIDevice.current.orientation.isLandscape {
self.MyChartView.chartDescription?.position = CGPoint(x: 適切な数値を設定, y: 0)
} else {
self.BarChartView.chartDescription?.position = CGPoint(x: 適切な数値を設定, y: 0)
}
case .pad:
if UIDevice.current.orientation.isLandscape {
self.MyChartView.chartDescription?.position = CGPoint(x: 適切な数値を設定, y: 0)
} else {
self.MyChartView.chartDescription?.position = CGPoint(x: 適切な数値を設定, y: 0)
}
default:
if UIDevice.current.orientation.isLandscape {
self.MyChartView.chartDescription?.position = CGPoint(x: 適切な数値を設定, y: 0)
} else {
self.MyChartView.chartDescription?.position = CGPoint(x: 適切な数値を設定, y: 0)
}
}

詳しくは https://github.com/danielgindi/Charts

W-8BEN-E 及び EINの取得について


アプリの販売準備にあたり、iTunesconnectで税金情報の登録が必要となります。アプリを米国内で販売するとApple社経由でも、日本の会社が米国内で事業してると見なされ、課税対象となります。その際、外国企業(米国から見ると日本企業)は、日米租税条約に基づき、米国側での30%の源泉徴収(InstructionのRequirements to Withholdの説明文に記載)の控除を受けられるため、iTunesconnect 税金情報サイト内の Form W-8BEN-Eに記入し、Apple社へオンラインで提出することを必ずオススメします。 Form W-8BEN-Eの記入の際、法人の場合は、EIN(雇用者識別番号)の記入が必要となりますので、EIN をIRS(米国税務局)から取得する必要があります。アップル社のサイトでW-8BENやEINの説明がありますが、内容が詳細でない部分もありましたので、IRS(米国税務局)からのEIN取得方法について共有します。

取得方法は、電話とファックスとフォームSS-4を米国へ郵送する3種がありますが、電話の場合は、その場でEIN番号を口頭で教えてもらえるので急ぎの場合はベストな選択肢です。電話番号 +1-267-941-109 はIRS(米国税務局)のサイトのApply by Telephone - International Applicantsのところに記載されています。名前、住所、電話番号を聞かれ、フォームSS-4に沿った内容の質問の受け答えをし、10分程で終了します。その後、2週間程でEINの番号の通知書類がIRSから日本へ発送されます。日本到着までは、そこから更に1〜2週間かかります。一般的にIRSは人手不足で書類処理に時間がかかる傾向があるようなので、上記以上にかかる可能性もあります。口頭でEIN取得後、即、iTunesconnectにEINを入力してもIRSの方でサーバに未だ反映さていないので、2週間ほど待ってからAppleのサイトで入力する必要があります。なお米国内の企業の場合は、IRSへ電話をかけてもオンラインのみでの受付なのでwww.irs.gov/irsへ行ってくださいと録音メッセージが流れます。しかしwww.irs.gov/irsで申請を始める場合、最初のステップ(1. Identity)のところで、日本企業にあてはまる法人形態がなく、海外の企業はオンラインの受付はしないので、(国番号 1)267-941-1099へ電話をしてくださいと下記のようにサイトに表示されます 。

Why is the Corporation requesting an EIN? Note: If you were incorporated outside of the United States or U.S. territories, you cannot apply for an EIN online. Please call us at 267-941-1099 (this is not a toll free number). Please exit the application by clicking “Exit” above.

なお、IRSからの質問の際、会社の業種の選択肢で、ITやソフトウェア開発はないので、IRSの方の指示で「製造業」でその製品が「ソフトウェア」という形で対応できます。 留意点ですが、SS-4の質問項目11番の事業開始年月日は、たとえ企業の設立が20年前でも、米国での課税対象となる事業(今回はアプリの販売開始)が来月からであれば、日付は来月とし、20年前にしてしまうと、米国の税務局が過去に遡って追徴課税があるかの調査対象になってしまう可能性があリます。SS-4の記入説明書には、外国企業(米国から見て)の場合は、(日本国内での)事業開始日ではなく米国内での事業を始めた日(今回のケースはApple社を通じてアプリの販売)または他のビジネスを買収した日を記入せよと記載されています。