├── ekidata
├── csv
│ └── .gitkeep
├── .ruby-version
├── .gitignore
├── Gemfile
├── sql
│ └── schema.sql
├── import.rb
└── download.rb
├── .gitignore
├── Cartfile
├── README.md
├── Cartfile.resolved
├── EkiBell
├── Assets.xcassets
│ ├── first.imageset
│ │ ├── first.pdf
│ │ └── Contents.json
│ ├── second.imageset
│ │ ├── second.pdf
│ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── LineViewController.swift
├── FavoriteViewController.swift
├── SearchViewController.swift
├── SettingsViewController.swift
├── MapViewController.swift
├── Threading.swift
├── Shortcut.swift
├── LineCell.xib
├── StationViewController.swift
├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
├── NearbyViewController.swift
├── AppDelegate.swift
├── Info.plist
├── StationCell.xib
└── Ekidata.swift
├── EkiBell.xcodeproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
├── xcuserdata
│ └── basuke.xcuserdatad
│ │ └── xcschemes
│ │ ├── xcschememanagement.plist
│ │ └── EkiBell.xcscheme
└── project.pbxproj
├── EkiBellTests
├── Info.plist
└── EkiBellTests.swift
└── EkiBellUITests
├── Info.plist
└── EkiBellUITests.swift
/ekidata/csv/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/ekidata/.ruby-version:
--------------------------------------------------------------------------------
1 | 2.2.4
2 |
--------------------------------------------------------------------------------
/ekidata/.gitignore:
--------------------------------------------------------------------------------
1 | csv/*.csv
2 | ekidata.db
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | Carthage/Build/
3 | Carthage/Checkouts/
4 | xcuserdata/
5 |
--------------------------------------------------------------------------------
/ekidata/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | gem 'mechanize'
4 | gem 'sqlite3'
5 |
--------------------------------------------------------------------------------
/Cartfile:
--------------------------------------------------------------------------------
1 | github "stephencelis/SQLite.swift" ~> 0.10.1
2 | github "ijoshsmith/swift-threading" "master"
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # EkiBell
2 |
3 | EkiBell reborn with Swift.
4 |
5 | EkiBell was originally written in 2008, which run on old iOS.
6 |
--------------------------------------------------------------------------------
/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "stephencelis/SQLite.swift" "0.10.1"
2 | github "ijoshsmith/swift-threading" "4a9d4a85d6a0dd0af2bb92de2ab646f10837c379"
3 |
--------------------------------------------------------------------------------
/EkiBell/Assets.xcassets/first.imageset/first.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/basuke/EkiBell/master/EkiBell/Assets.xcassets/first.imageset/first.pdf
--------------------------------------------------------------------------------
/EkiBell/Assets.xcassets/second.imageset/second.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/basuke/EkiBell/master/EkiBell/Assets.xcassets/second.imageset/second.pdf
--------------------------------------------------------------------------------
/EkiBell.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/EkiBell/LineViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // LineViewController.swift
3 | // EkiBell
4 | //
5 | // Created by Basuke Suzuki on 4/30/16.
6 | // Copyright © 2016 Basuke Suzuki. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
--------------------------------------------------------------------------------
/EkiBell/FavoriteViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FavoriteViewController.swift
3 | // EkiBell
4 | //
5 | // Created by Basuke Suzuki on 4/30/16.
6 | // Copyright © 2016 Basuke Suzuki. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
--------------------------------------------------------------------------------
/EkiBell/SearchViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SearchViewController.swift
3 | // EkiBell
4 | //
5 | // Created by Basuke Suzuki on 4/30/16.
6 | // Copyright © 2016 Basuke Suzuki. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
--------------------------------------------------------------------------------
/EkiBell/SettingsViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SettingsViewController.swift
3 | // EkiBell
4 | //
5 | // Created by Basuke Suzuki on 4/30/16.
6 | // Copyright © 2016 Basuke Suzuki. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
--------------------------------------------------------------------------------
/EkiBell/Assets.xcassets/first.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "first.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/EkiBell/Assets.xcassets/second.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "second.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/EkiBell/MapViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MapViewController.swift
3 | // EkiBell
4 | //
5 | // Created by Basuke Suzuki on 4/21/16.
6 | // Copyright © 2016 Basuke Suzuki. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import MapKit
11 |
12 | class MapViewController: UIViewController {
13 |
14 | override func viewDidLoad() {
15 | super.viewDidLoad()
16 | // Do any additional setup after loading the view, typically from a nib.
17 | }
18 |
19 | override func didReceiveMemoryWarning() {
20 | super.didReceiveMemoryWarning()
21 | // Dispose of any resources that can be recreated.
22 | }
23 |
24 |
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/EkiBell/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | }
33 | ],
34 | "info" : {
35 | "version" : 1,
36 | "author" : "xcode"
37 | }
38 | }
--------------------------------------------------------------------------------
/ekidata/sql/schema.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE lines(
2 | id INTEGER PRIMARY KEY,
3 | name VAR CHAR(255) NOT NULL,
4 | short_name VAR CHAR(255) NOT NULL,
5 | color INTEGER,
6 | icon_name VAR CHAR(255)
7 | );
8 |
9 | CREATE TABLE stations (
10 | id INTEGER PRIMARY KEY,
11 | name VAR CHAR(255) NOT NULL,
12 | latitude REAL NOT NULL,
13 | longitude REAL NOT NULL,
14 | group_id INTEGER NOT NULL,
15 | line_id INTEGER NOT NULL,
16 | type INTEGER NOT NULL,
17 | sort INTEGER NOT NULL
18 | );
19 |
20 | CREATE INDEX lines_id ON lines(id);
21 | CREATE INDEX stations_id ON stations(id);
22 | CREATE INDEX stations_latitude ON stations(latitude);
23 | CREATE INDEX stations_longitude ON stations(longitude);
24 | CREATE INDEX stations_group_id ON stations(group_id);
25 | CREATE INDEX stations_line_id ON stations(line_id);
26 |
--------------------------------------------------------------------------------
/EkiBellTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/EkiBellUITests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/EkiBell.xcodeproj/xcuserdata/basuke.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | EkiBell.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | EB0E19941CC9A59800FA196E
16 |
17 | primary
18 |
19 |
20 | EB0E19AA1CC9A59B00FA196E
21 |
22 | primary
23 |
24 |
25 | EB0E19B51CC9A59B00FA196E
26 |
27 | primary
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/EkiBell/Threading.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Threading.swift
3 | // SwiftThreading
4 | //
5 | // Created by Joshua Smith on 7/5/14.
6 | // Copyright (c) 2014 iJoshSmith. All rights reserved.
7 | //
8 |
9 | //
10 | // This code has been tested against Xcode 6 Beta 5.
11 | //
12 |
13 | import Foundation
14 |
15 | /**
16 | Executes the lefthand closure on a background thread and,
17 | upon completion, the righthand closure on the main thread.
18 | Passes the background closure's output, if any, to the main closure.
19 | */
20 | func async (
21 | backgroundClosure: () -> R,
22 | mainClosure: (result: R) -> ())
23 | {
24 | dispatch_async(queue) {
25 | let result = backgroundClosure()
26 | dispatch_async(dispatch_get_main_queue(), {
27 | mainClosure(result: result)
28 | })
29 | }
30 | }
31 |
32 | /** Serial dispatch queue used by the ~> operator. */
33 | private let queue = dispatch_queue_create("serial-worker", DISPATCH_QUEUE_SERIAL)
--------------------------------------------------------------------------------
/EkiBellTests/EkiBellTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // EkiBellTests.swift
3 | // EkiBellTests
4 | //
5 | // Created by Basuke Suzuki on 4/21/16.
6 | // Copyright © 2016 Basuke Suzuki. All rights reserved.
7 | //
8 |
9 | import XCTest
10 | @testable import EkiBell
11 |
12 | class EkiBellTests: XCTestCase {
13 |
14 | override func setUp() {
15 | super.setUp()
16 | // Put setup code here. This method is called before the invocation of each test method in the class.
17 | }
18 |
19 | override func tearDown() {
20 | // Put teardown code here. This method is called after the invocation of each test method in the class.
21 | super.tearDown()
22 | }
23 |
24 | func testExample() {
25 | // This is an example of a functional test case.
26 | // Use XCTAssert and related functions to verify your tests produce the correct results.
27 | }
28 |
29 | func testPerformanceExample() {
30 | // This is an example of a performance test case.
31 | self.measureBlock {
32 | // Put the code you want to measure the time of here.
33 | }
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/EkiBell/Shortcut.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Shortcut.swift
3 | // EkiBell
4 | //
5 | // Created by Basuke Suzuki on 5/3/16.
6 | // Copyright © 2016 Basuke Suzuki. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import MapKit
11 |
12 | extension UITableView {
13 | func registerCell(identifier:String) {
14 | registerNib(UINib(nibName: identifier, bundle: nil), forCellReuseIdentifier: identifier)
15 | }
16 | }
17 |
18 | extension MKCoordinateRegion {
19 | init(center:CLLocationCoordinate2D, radius:CLLocationDistance) {
20 | let delta = radius * 2
21 | let R:CLLocationDistance = 40076.5 * 1000
22 | let R2 = R * cos(M_PI * 2 * center.latitude / 360.0)
23 | let latitudeDelta:CLLocationDegrees = 360.0 * delta / R
24 | let longitudeDelta:CLLocationDegrees = 360.0 * delta / (R2 > delta ? R2 : delta)
25 |
26 | self.center = center
27 | self.span = MKCoordinateSpan(latitudeDelta: latitudeDelta, longitudeDelta: longitudeDelta)
28 | }
29 |
30 | var north: CLLocationDegrees {
31 | return center.latitude + span.latitudeDelta / 2
32 | }
33 |
34 | var east: CLLocationDegrees {
35 | return center.longitude + span.longitudeDelta / 2
36 | }
37 |
38 | var south: CLLocationDegrees {
39 | return center.latitude - span.latitudeDelta / 2
40 | }
41 |
42 | var west: CLLocationDegrees {
43 | return center.longitude - span.longitudeDelta / 2
44 | }
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/EkiBellUITests/EkiBellUITests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // EkiBellUITests.swift
3 | // EkiBellUITests
4 | //
5 | // Created by Basuke Suzuki on 4/21/16.
6 | // Copyright © 2016 Basuke Suzuki. All rights reserved.
7 | //
8 |
9 | import XCTest
10 |
11 | class EkiBellUITests: XCTestCase {
12 |
13 | override func setUp() {
14 | super.setUp()
15 |
16 | // Put setup code here. This method is called before the invocation of each test method in the class.
17 |
18 | // In UI tests it is usually best to stop immediately when a failure occurs.
19 | continueAfterFailure = false
20 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
21 | XCUIApplication().launch()
22 |
23 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
24 | }
25 |
26 | override func tearDown() {
27 | // Put teardown code here. This method is called after the invocation of each test method in the class.
28 | super.tearDown()
29 | }
30 |
31 | func testExample() {
32 | // Use recording to get started writing UI tests.
33 | // Use XCTAssert and related functions to verify your tests produce the correct results.
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/EkiBell/LineCell.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/EkiBell/StationViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StationViewController.swift
3 | // EkiBell
4 | //
5 | // Created by Basuke Suzuki on 4/21/16.
6 | // Copyright © 2016 Basuke Suzuki. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import CoreLocation
11 | import MapKit
12 |
13 | class StationViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
14 | var station:Station!;
15 |
16 | @IBOutlet weak var mapView: MKMapView!
17 | @IBOutlet weak var trackButton: UIButton!
18 | @IBOutlet weak var linesTableView: UITableView!
19 |
20 | override func viewDidLoad() {
21 | super.viewDidLoad()
22 | // Do any additional setup after loading the view, typically from a nib.
23 |
24 | linesTableView.registerCell("LineCell")
25 |
26 | title = station.name
27 |
28 | mapView.region = MKCoordinateRegion(center: station.coordinate, radius:200)
29 | }
30 |
31 | override func didReceiveMemoryWarning() {
32 | super.didReceiveMemoryWarning()
33 | // Dispose of any resources that can be recreated.
34 | }
35 |
36 | @IBAction func trackThisStation(sender: AnyObject) {
37 | }
38 |
39 | func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
40 | return station.lines.count
41 | }
42 |
43 | func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
44 | let cell = tableView.dequeueReusableCellWithIdentifier("LineCell", forIndexPath: indexPath)
45 | let line = station.lines[indexPath.row]
46 | cell.textLabel?.text = line.name
47 |
48 | return cell
49 | }
50 | }
51 |
52 |
--------------------------------------------------------------------------------
/ekidata/import.rb:
--------------------------------------------------------------------------------
1 | # -*- mode:ruby; coding:utf-8 -*-
2 |
3 | require 'rubygems'
4 | require 'sqlite3'
5 | require 'csv'
6 |
7 | $base = File.dirname(__FILE__)
8 | $sql_dir = $base + "/sql"
9 | $csv_dir = $base + "/csv"
10 |
11 | def run_sql_file(db, name)
12 | path = "#{$sql_dir}/#{name}.sql"
13 |
14 | File.open(path, 'r') do |file|
15 | sql = file.read()
16 | db.execute_batch(sql)
17 | end
18 | end
19 |
20 | db = SQLite3::Database.new("ekidata.db")
21 |
22 | run_sql_file(db, "schema")
23 |
24 | # import lines
25 | sql = "INSERT INTO lines(id, name, short_name) VALUES (?, ?, ?)"
26 | CSV.table("#{$csv_dir}/line.csv").each do |row|
27 | f = row.fields
28 | db.execute sql, [f[0], f[4], f[2]]
29 | end
30 |
31 | #import stations
32 | sql = "INSERT INTO stations VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
33 | CSV.table("#{$csv_dir}/station.csv").each do |row|
34 | f = row.fields
35 | # 0: station_cd
36 | # 1: station_g_cd
37 | # 2: station_name
38 | # 3: station_name_k
39 | # 4: station_name_r
40 | # 5: line_cd
41 | # 6: pref_cd
42 | # 7: post
43 | # 8: add
44 | # 9: lon
45 | # 10: lat
46 | # 11: open_ymd
47 | # 12: close_ymd
48 | # 13: e_status
49 | # 14: e_sort
50 |
51 | # 0: 1110101,
52 | # 1: 1110101,
53 | # 2: "函館",
54 | # 3: nil,
55 | # 4: nil,
56 | # 5: 11101,
57 | # 6: 1,
58 | # 7: "040-0063",
59 | # 8: "北海道函館市若松町12-13",
60 | # 9: 140.726413,
61 | # 10: 41.773709,
62 | # 11: "1902-12-10",
63 | # 12: nil,
64 | # 13: 0,
65 | # 14: 1110101
66 | db.execute sql, [f[0],f[2],f[10],f[9],f[1],f[5],f[13],f[14]]
67 | end
68 |
--------------------------------------------------------------------------------
/EkiBell/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/EkiBell/NearbyViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NearbyViewController.swift
3 | // EkiBell
4 | //
5 | // Created by Basuke Suzuki on 4/21/16.
6 | // Copyright © 2016 Basuke Suzuki. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import CoreLocation
11 |
12 | class NearbyViewController: UITableViewController {
13 | var stations:[Station] = [];
14 |
15 | override func viewDidLoad() {
16 | super.viewDidLoad()
17 | // Do any additional setup after loading the view, typically from a nib.
18 |
19 | tableView.registerCell("StationCell")
20 |
21 | let loc = CLLocation(latitude: 35.7021, longitude: 139.7753)
22 | async({ stationsCloseToLocation(loc.coordinate, delta: 5000, count: 50)}) { result in
23 | self.stations = result
24 | self.tableView.reloadData()
25 | }
26 | }
27 |
28 | override func didReceiveMemoryWarning() {
29 | super.didReceiveMemoryWarning()
30 | // Dispose of any resources that can be recreated.
31 | }
32 |
33 |
34 | override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
35 | return stations.count
36 | }
37 |
38 | override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
39 | let cell = tableView.dequeueReusableCellWithIdentifier("StationCell", forIndexPath: indexPath)
40 | let station = stations[indexPath.row]
41 | cell.textLabel?.text = station.name
42 | cell.detailTextLabel?.text = "\(station.id) [\(station.groupId)] \(station.coordinate.latitude), \(station.coordinate.longitude)"
43 |
44 |
45 | return cell
46 | }
47 |
48 | override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
49 | tableView.deselectRowAtIndexPath(indexPath, animated: true)
50 |
51 | // let viewController = StationViewController()
52 | let viewController = storyboard?.instantiateViewControllerWithIdentifier("station") as! StationViewController
53 | viewController.station = stations[indexPath.row]
54 |
55 | navigationController?.pushViewController(viewController, animated: true)
56 | }
57 | }
58 |
59 |
--------------------------------------------------------------------------------
/ekidata/download.rb:
--------------------------------------------------------------------------------
1 | # -*- mode:ruby; coding:utf-8 -*-
2 |
3 | require 'rubygems'
4 | require 'mechanize'
5 | require 'cgi'
6 |
7 | csv_dir = File.dirname(__FILE__) + "/csv"
8 |
9 | agent = Mechanize.new do |agent|
10 | agent.user_agent_alias = 'Mac Safari'
11 | end
12 |
13 | # login
14 | login_page = agent.get("https://www.ekidata.jp/dl/")
15 |
16 | form = login_page.forms[0]
17 | form.ac = 'basuke@siesta.co.jp'
18 | form.ps = "79F9PgBV3aVhBHuiyaWAkYL"
19 |
20 | menu_page = agent.submit(form, form.buttons.first)
21 |
22 | # menu
23 | download_page = menu_page.links.find { |link| link.text == "データダウンロード" }.click
24 |
25 |
26 | # download
27 |
28 | company_links = []
29 | line_links = []
30 | station_links = []
31 | join_links = []
32 |
33 | download_page.links.select do |link|
34 | link.uri.path == "./f.php"
35 | end.each do |link|
36 | params = CGI.parse(link.uri.query)
37 |
38 | case params['t']
39 | when ['1']
40 | links = company_links
41 | name = 'company'
42 | when ['3']
43 | links = line_links
44 | name = 'line'
45 | when ['5']
46 | links = station_links
47 | name = 'station'
48 | when ['6']
49 | links = join_links
50 | name = 'join'
51 | else
52 | links = []
53 | name = ''
54 | end
55 |
56 | links << {:name => name, :version => params['d'][0], :link => link}
57 | end
58 |
59 | company_link = company_links.first
60 | line_link = line_links.first
61 | station_link = station_links.first
62 | join_link = join_links.first
63 |
64 | base = File.dirname(__FILE__)
65 | [company_link, line_link, station_link, join_link].each do |info|
66 | name = info[:name]
67 | version = info[:version]
68 | csv = "#{name}#{version}.csv"
69 |
70 | path = "#{csv_dir}/#{csv}"
71 | if not File.exists? path then
72 | puts "Downloading #{info[:link].uri}"
73 | agent.download(info[:link].uri, path, [], download_page)
74 |
75 | sym = "#{csv_dir}/#{name}.csv"
76 | if File.exists? sym then
77 | puts "Delete old symlink"
78 | File.delete sym
79 | end
80 |
81 | puts "Create new symlink #{sym}"
82 | File.symlink(csv, sym)
83 | end
84 | end
85 |
--------------------------------------------------------------------------------
/EkiBell/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // EkiBell
4 | //
5 | // Created by Basuke Suzuki on 4/21/16.
6 | // Copyright © 2016 Basuke Suzuki. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 |
17 | func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
18 | // Override point for customization after application launch.
19 | return true
20 | }
21 |
22 | func applicationWillResignActive(application: UIApplication) {
23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
25 | }
26 |
27 | func applicationDidEnterBackground(application: UIApplication) {
28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
30 | }
31 |
32 | func applicationWillEnterForeground(application: UIApplication) {
33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
34 | }
35 |
36 | func applicationDidBecomeActive(application: UIApplication) {
37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
38 | }
39 |
40 | func applicationWillTerminate(application: UIApplication) {
41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
42 | }
43 |
44 |
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/EkiBell/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDocumentTypes
8 |
9 |
10 | CFBundleTypeName
11 | MKDirectionsRequest
12 | LSItemContentTypes
13 |
14 | com.apple.maps.directionsrequest
15 |
16 |
17 |
18 | CFBundleExecutable
19 | $(EXECUTABLE_NAME)
20 | CFBundleIdentifier
21 | $(PRODUCT_BUNDLE_IDENTIFIER)
22 | CFBundleInfoDictionaryVersion
23 | 6.0
24 | CFBundleName
25 | $(PRODUCT_NAME)
26 | CFBundlePackageType
27 | APPL
28 | CFBundleShortVersionString
29 | 1.0
30 | CFBundleSignature
31 | ????
32 | CFBundleVersion
33 | 1
34 | LSRequiresIPhoneOS
35 |
36 | MKDirectionsApplicationSupportedModes
37 |
38 | MKDirectionsModeBike
39 | MKDirectionsModeBus
40 | MKDirectionsModeCar
41 | MKDirectionsModeFerry
42 | MKDirectionsModeOther
43 | MKDirectionsModePedestrian
44 | MKDirectionsModePlane
45 | MKDirectionsModeStreetCar
46 | MKDirectionsModeSubway
47 | MKDirectionsModeTaxi
48 | MKDirectionsModeTrain
49 |
50 | UIBackgroundModes
51 |
52 | audio
53 | location
54 |
55 | UILaunchStoryboardName
56 | LaunchScreen
57 | UIMainStoryboardFile
58 | Main
59 | UIRequiredDeviceCapabilities
60 |
61 | armv7
62 |
63 | UIStatusBarTintParameters
64 |
65 | UINavigationBar
66 |
67 | Style
68 | UIBarStyleDefault
69 | Translucent
70 |
71 |
72 |
73 | UISupportedInterfaceOrientations
74 |
75 | UIInterfaceOrientationPortrait
76 | UIInterfaceOrientationLandscapeLeft
77 | UIInterfaceOrientationLandscapeRight
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/EkiBell/StationCell.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
24 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/EkiBell.xcodeproj/xcuserdata/basuke.xcuserdatad/xcschemes/EkiBell.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
43 |
49 |
50 |
51 |
52 |
53 |
59 |
60 |
61 |
62 |
63 |
64 |
74 |
76 |
82 |
83 |
84 |
85 |
86 |
87 |
93 |
95 |
101 |
102 |
103 |
104 |
106 |
107 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/EkiBell/Ekidata.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Ekidata.swift
3 | // EkiBell
4 | //
5 | // Created by Basuke Suzuki on 4/24/16.
6 | // Copyright © 2016 Basuke Suzuki. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import SQLite
11 | import CoreLocation
12 | import MapKit
13 |
14 | let STATIONS = Table("stations")
15 | let LINES = Table("lines")
16 | let ID = Expression("id")
17 | let NAME = Expression("name")
18 | let SHORT_NAME = Expression("short_name")
19 | let COLOR = Expression("color")
20 | let ICON_NAME = Expression("icon_name")
21 | let LATITUDE = Expression("latitude")
22 | let LONGITUDE = Expression("longitude")
23 | let GROUP_ID = Expression("group_id")
24 | let LINE_ID = Expression("line_id")
25 | let TYPE = Expression("type")
26 | let SORT = Expression("sort")
27 |
28 | extension Row {
29 | var id: Int { return get(ID) }
30 | var name: String { return get(NAME) }
31 | var shortName: String { return get(SHORT_NAME) }
32 | var color: Int? { return get(COLOR) }
33 | var iconName: String? { return get(ICON_NAME) }
34 | var lineId: Int { return get(LINE_ID) }
35 | var latitude: Double { return get(LATITUDE) }
36 | var longitude: Double { return get(LONGITUDE) }
37 | var groupId: Int { return get(GROUP_ID) }
38 | var type: Int { return get(TYPE) }
39 | var sort: Int { return get(SORT) }
40 | }
41 |
42 | struct Line {
43 | var id: Int
44 | var name: String
45 | var shortName: String
46 | var color: Int?
47 | var iconName: String?
48 |
49 | init(row:Row) {
50 | id = row.id
51 | name = row.name
52 | shortName = row.shortName
53 | color = row.color
54 | iconName = row.iconName
55 | }
56 | }
57 |
58 | struct Station {
59 | var id: Int
60 | var name: String
61 | var lineId: Int
62 | var coordinate: CLLocationCoordinate2D
63 | var groupId: Int
64 | var stations: [Station]?
65 |
66 | init(row:Row) {
67 | id = row.id
68 | name = row.name
69 | lineId = row.lineId
70 | coordinate = CLLocationCoordinate2D(latitude: row.latitude, longitude: row.longitude)
71 | groupId = row.groupId
72 | }
73 |
74 | var location: CLLocation {
75 | return CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude)
76 | }
77 |
78 | var line: Line {
79 | return lineWithId(lineId)
80 | }
81 |
82 | var lines: [Line] {
83 | return [line]
84 | }
85 |
86 | func distanceFrom(location:CLLocation) -> CLLocationDistance {
87 | return self.location.distanceFromLocation(location)
88 | }
89 |
90 | func sameStation(other:Station) -> Bool {
91 | return name == other.name && coordinate.latitude == other.coordinate.latitude && coordinate.longitude == other.coordinate.longitude
92 | }
93 |
94 | mutating func add(station:Station) {
95 | if stations == nil {
96 | stations = []
97 | }
98 |
99 | stations!.append(station)
100 | }
101 | }
102 |
103 | func allStations() -> [Station] {
104 | return rowsToStations(try! Ekidata.shared.db.prepare(STATIONS))
105 | }
106 |
107 | func stationsCloseToLocation(center:CLLocationCoordinate2D, delta:CLLocationDistance, count:Int) -> [Station] {
108 | let region = MKCoordinateRegion(center:center, radius:delta / 2)
109 |
110 | let stations = rowsToStations(Ekidata.shared.prepare(
111 | STATIONS
112 | .filter(region.south...region.north ~= LATITUDE)
113 | .filter(region.west...region.east ~= LONGITUDE)
114 | ))
115 | return sortStations(stations, byDistanceFromLocation:CLLocation(latitude: center.latitude, longitude: center.longitude))
116 | }
117 |
118 | private func rowsToStations(rows:AnySequence) -> [Station] {
119 | var result:[Station] = []
120 |
121 | for row in rows {
122 | result.append(Station(row: row))
123 | }
124 |
125 | return result
126 | }
127 |
128 | func stationWithId(id:Int) -> Station {
129 | let row = Ekidata.shared.db.pluck(STATIONS.filter(ID == id).limit(1))!
130 | return Station(row: row)
131 | }
132 |
133 | func lineWithId(id:Int) -> Line {
134 | let row = Ekidata.shared.db.pluck(LINES.filter(ID == id).limit(1))!
135 | return Line(row: row)
136 | }
137 |
138 | func sortStations(stations:[Station], byDistanceFromLocation location:CLLocation) -> [Station] {
139 | return stations.map({ ($0, $0.distanceFrom(location)) }) // (station, distance from ceneter
140 | .sort({ (a1, a2) in
141 | let (s1, d1) = a1, (s2, d2) = a2
142 |
143 | if d1 < d2 {
144 | return true
145 | } else if d1 > d2 {
146 | return false
147 | }
148 |
149 | if s1.groupId == s1.id {
150 | return true
151 | }
152 | return s1.id < s2.id
153 | })
154 | .map({ $0.0 })
155 | }
156 |
157 | class Ekidata {
158 | static let shared = Ekidata(path:dbPath)
159 |
160 | static var dbPath: String {
161 | return NSBundle.mainBundle().pathForResource("ekidata", ofType: "db")!
162 | }
163 |
164 | let db:Connection
165 |
166 | private init(path:String) {
167 | db = try! Connection(path, readonly: true)
168 | db.trace({ print($0) })
169 | }
170 |
171 | func prepare(query:QueryType) -> AnySequence {
172 | return try! db.prepare(query)
173 | }
174 | }
175 |
--------------------------------------------------------------------------------
/EkiBell/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
--------------------------------------------------------------------------------
/EkiBell.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | EB0E19991CC9A59800FA196E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB0E19981CC9A59800FA196E /* AppDelegate.swift */; };
11 | EB0E199B1CC9A59800FA196E /* MapViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB0E199A1CC9A59800FA196E /* MapViewController.swift */; };
12 | EB0E199D1CC9A59900FA196E /* NearbyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB0E199C1CC9A59900FA196E /* NearbyViewController.swift */; };
13 | EB0E19A01CC9A59A00FA196E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EB0E199E1CC9A59A00FA196E /* Main.storyboard */; };
14 | EB0E19A21CC9A59B00FA196E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EB0E19A11CC9A59B00FA196E /* Assets.xcassets */; };
15 | EB0E19A51CC9A59B00FA196E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EB0E19A31CC9A59B00FA196E /* LaunchScreen.storyboard */; };
16 | EB0E19B01CC9A59B00FA196E /* EkiBellTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB0E19AF1CC9A59B00FA196E /* EkiBellTests.swift */; };
17 | EB0E19BB1CC9A59C00FA196E /* EkiBellUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB0E19BA1CC9A59C00FA196E /* EkiBellUITests.swift */; };
18 | EB0E19C91CC9A69400FA196E /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB0E19C81CC9A69400FA196E /* MapKit.framework */; };
19 | EB84893B1CD79A8500FC99A8 /* StationCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = EB84893A1CD79A8500FC99A8 /* StationCell.xib */; };
20 | EB84893D1CD8F90B00FC99A8 /* LineCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = EB84893C1CD8F90B00FC99A8 /* LineCell.xib */; };
21 | EB84893F1CD8F97B00FC99A8 /* Shortcut.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB84893E1CD8F97B00FC99A8 /* Shortcut.swift */; };
22 | EB8E8F021CD4F9D10077C5F3 /* FavoriteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB8E8F011CD4F9D10077C5F3 /* FavoriteViewController.swift */; };
23 | EB8E8F041CD4F9E40077C5F3 /* SearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB8E8F031CD4F9E40077C5F3 /* SearchViewController.swift */; };
24 | EB8E8F061CD4F9F90077C5F3 /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB8E8F051CD4F9F90077C5F3 /* SettingsViewController.swift */; };
25 | EB8E8F081CD4FA080077C5F3 /* StationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB8E8F071CD4FA080077C5F3 /* StationViewController.swift */; };
26 | EB8E8F0A1CD4FA1B0077C5F3 /* LineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB8E8F091CD4FA1B0077C5F3 /* LineViewController.swift */; };
27 | EBAE63C91CCD13DB005CF6F8 /* ekidata.db in Resources */ = {isa = PBXBuildFile; fileRef = EBAE63C81CCD13DB005CF6F8 /* ekidata.db */; };
28 | EBAE63CA1CCD13DB005CF6F8 /* ekidata.db in Resources */ = {isa = PBXBuildFile; fileRef = EBAE63C81CCD13DB005CF6F8 /* ekidata.db */; };
29 | EBAE63CB1CCD13DB005CF6F8 /* ekidata.db in Resources */ = {isa = PBXBuildFile; fileRef = EBAE63C81CCD13DB005CF6F8 /* ekidata.db */; };
30 | EBAE63CD1CCD159E005CF6F8 /* Ekidata.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBAE63CC1CCD159E005CF6F8 /* Ekidata.swift */; };
31 | EBAE63CE1CCD159E005CF6F8 /* Ekidata.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBAE63CC1CCD159E005CF6F8 /* Ekidata.swift */; };
32 | EBAE63CF1CCD159E005CF6F8 /* Ekidata.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBAE63CC1CCD159E005CF6F8 /* Ekidata.swift */; };
33 | EBAE63D01CCD1CAA005CF6F8 /* SQLite.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB2D23E21CC9AD2E00783E67 /* SQLite.framework */; };
34 | EBAE63D31CD0990A005CF6F8 /* Threading.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBAE63D21CD0990A005CF6F8 /* Threading.swift */; };
35 | EBAE63D41CD0990A005CF6F8 /* Threading.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBAE63D21CD0990A005CF6F8 /* Threading.swift */; };
36 | EBAE63D51CD0990A005CF6F8 /* Threading.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBAE63D21CD0990A005CF6F8 /* Threading.swift */; };
37 | /* End PBXBuildFile section */
38 |
39 | /* Begin PBXContainerItemProxy section */
40 | EB0E19AC1CC9A59B00FA196E /* PBXContainerItemProxy */ = {
41 | isa = PBXContainerItemProxy;
42 | containerPortal = EB0E198D1CC9A59700FA196E /* Project object */;
43 | proxyType = 1;
44 | remoteGlobalIDString = EB0E19941CC9A59800FA196E;
45 | remoteInfo = EkiBell;
46 | };
47 | EB0E19B71CC9A59B00FA196E /* PBXContainerItemProxy */ = {
48 | isa = PBXContainerItemProxy;
49 | containerPortal = EB0E198D1CC9A59700FA196E /* Project object */;
50 | proxyType = 1;
51 | remoteGlobalIDString = EB0E19941CC9A59800FA196E;
52 | remoteInfo = EkiBell;
53 | };
54 | /* End PBXContainerItemProxy section */
55 |
56 | /* Begin PBXFileReference section */
57 | EB0E19951CC9A59800FA196E /* EkiBell.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = EkiBell.app; sourceTree = BUILT_PRODUCTS_DIR; };
58 | EB0E19981CC9A59800FA196E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
59 | EB0E199A1CC9A59800FA196E /* MapViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapViewController.swift; sourceTree = ""; };
60 | EB0E199C1CC9A59900FA196E /* NearbyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NearbyViewController.swift; sourceTree = ""; };
61 | EB0E199F1CC9A59A00FA196E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
62 | EB0E19A11CC9A59B00FA196E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
63 | EB0E19A41CC9A59B00FA196E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
64 | EB0E19A61CC9A59B00FA196E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
65 | EB0E19AB1CC9A59B00FA196E /* EkiBellTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EkiBellTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
66 | EB0E19AF1CC9A59B00FA196E /* EkiBellTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EkiBellTests.swift; sourceTree = ""; };
67 | EB0E19B11CC9A59B00FA196E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
68 | EB0E19B61CC9A59B00FA196E /* EkiBellUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EkiBellUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
69 | EB0E19BA1CC9A59C00FA196E /* EkiBellUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EkiBellUITests.swift; sourceTree = ""; };
70 | EB0E19BC1CC9A59C00FA196E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
71 | EB0E19C81CC9A69400FA196E /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = System/Library/Frameworks/MapKit.framework; sourceTree = SDKROOT; };
72 | EB2D23E21CC9AD2E00783E67 /* SQLite.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SQLite.framework; path = Carthage/Build/iOS/SQLite.framework; sourceTree = ""; };
73 | EB84893A1CD79A8500FC99A8 /* StationCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = StationCell.xib; sourceTree = ""; };
74 | EB84893C1CD8F90B00FC99A8 /* LineCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LineCell.xib; sourceTree = ""; };
75 | EB84893E1CD8F97B00FC99A8 /* Shortcut.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Shortcut.swift; sourceTree = ""; };
76 | EB8E8F011CD4F9D10077C5F3 /* FavoriteViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FavoriteViewController.swift; sourceTree = ""; };
77 | EB8E8F031CD4F9E40077C5F3 /* SearchViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchViewController.swift; sourceTree = ""; };
78 | EB8E8F051CD4F9F90077C5F3 /* SettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = ""; };
79 | EB8E8F071CD4FA080077C5F3 /* StationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StationViewController.swift; sourceTree = ""; };
80 | EB8E8F091CD4FA1B0077C5F3 /* LineViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineViewController.swift; sourceTree = ""; };
81 | EBAE63C81CCD13DB005CF6F8 /* ekidata.db */ = {isa = PBXFileReference; lastKnownFileType = file; name = ekidata.db; path = ekidata/ekidata.db; sourceTree = ""; };
82 | EBAE63CC1CCD159E005CF6F8 /* Ekidata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Ekidata.swift; sourceTree = ""; };
83 | EBAE63D21CD0990A005CF6F8 /* Threading.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Threading.swift; sourceTree = ""; };
84 | /* End PBXFileReference section */
85 |
86 | /* Begin PBXFrameworksBuildPhase section */
87 | EB0E19921CC9A59800FA196E /* Frameworks */ = {
88 | isa = PBXFrameworksBuildPhase;
89 | buildActionMask = 2147483647;
90 | files = (
91 | EB0E19C91CC9A69400FA196E /* MapKit.framework in Frameworks */,
92 | EBAE63D01CCD1CAA005CF6F8 /* SQLite.framework in Frameworks */,
93 | );
94 | runOnlyForDeploymentPostprocessing = 0;
95 | };
96 | EB0E19A81CC9A59B00FA196E /* Frameworks */ = {
97 | isa = PBXFrameworksBuildPhase;
98 | buildActionMask = 2147483647;
99 | files = (
100 | );
101 | runOnlyForDeploymentPostprocessing = 0;
102 | };
103 | EB0E19B31CC9A59B00FA196E /* Frameworks */ = {
104 | isa = PBXFrameworksBuildPhase;
105 | buildActionMask = 2147483647;
106 | files = (
107 | );
108 | runOnlyForDeploymentPostprocessing = 0;
109 | };
110 | /* End PBXFrameworksBuildPhase section */
111 |
112 | /* Begin PBXGroup section */
113 | EB0E198C1CC9A59700FA196E = {
114 | isa = PBXGroup;
115 | children = (
116 | EB2D23E21CC9AD2E00783E67 /* SQLite.framework */,
117 | EB0E19C81CC9A69400FA196E /* MapKit.framework */,
118 | EBAE63C81CCD13DB005CF6F8 /* ekidata.db */,
119 | EB0E19971CC9A59800FA196E /* EkiBell */,
120 | EB0E19AE1CC9A59B00FA196E /* EkiBellTests */,
121 | EB0E19B91CC9A59B00FA196E /* EkiBellUITests */,
122 | EB0E19961CC9A59800FA196E /* Products */,
123 | );
124 | sourceTree = "";
125 | };
126 | EB0E19961CC9A59800FA196E /* Products */ = {
127 | isa = PBXGroup;
128 | children = (
129 | EB0E19951CC9A59800FA196E /* EkiBell.app */,
130 | EB0E19AB1CC9A59B00FA196E /* EkiBellTests.xctest */,
131 | EB0E19B61CC9A59B00FA196E /* EkiBellUITests.xctest */,
132 | );
133 | name = Products;
134 | sourceTree = "";
135 | };
136 | EB0E19971CC9A59800FA196E /* EkiBell */ = {
137 | isa = PBXGroup;
138 | children = (
139 | EB0E19981CC9A59800FA196E /* AppDelegate.swift */,
140 | EB0E199A1CC9A59800FA196E /* MapViewController.swift */,
141 | EB0E199C1CC9A59900FA196E /* NearbyViewController.swift */,
142 | EB8E8F011CD4F9D10077C5F3 /* FavoriteViewController.swift */,
143 | EB8E8F031CD4F9E40077C5F3 /* SearchViewController.swift */,
144 | EB8E8F051CD4F9F90077C5F3 /* SettingsViewController.swift */,
145 | EB8E8F071CD4FA080077C5F3 /* StationViewController.swift */,
146 | EB8E8F091CD4FA1B0077C5F3 /* LineViewController.swift */,
147 | EB0E199E1CC9A59A00FA196E /* Main.storyboard */,
148 | EB84893A1CD79A8500FC99A8 /* StationCell.xib */,
149 | EB84893C1CD8F90B00FC99A8 /* LineCell.xib */,
150 | EB8E8F0B1CD4FA350077C5F3 /* Logic */,
151 | EB8E8F0C1CD4FA400077C5F3 /* Utilities */,
152 | EB0E19A11CC9A59B00FA196E /* Assets.xcassets */,
153 | EB0E19A31CC9A59B00FA196E /* LaunchScreen.storyboard */,
154 | EB0E19A61CC9A59B00FA196E /* Info.plist */,
155 | );
156 | path = EkiBell;
157 | sourceTree = "";
158 | };
159 | EB0E19AE1CC9A59B00FA196E /* EkiBellTests */ = {
160 | isa = PBXGroup;
161 | children = (
162 | EB0E19AF1CC9A59B00FA196E /* EkiBellTests.swift */,
163 | EB0E19B11CC9A59B00FA196E /* Info.plist */,
164 | );
165 | path = EkiBellTests;
166 | sourceTree = "";
167 | };
168 | EB0E19B91CC9A59B00FA196E /* EkiBellUITests */ = {
169 | isa = PBXGroup;
170 | children = (
171 | EB0E19BA1CC9A59C00FA196E /* EkiBellUITests.swift */,
172 | EB0E19BC1CC9A59C00FA196E /* Info.plist */,
173 | );
174 | path = EkiBellUITests;
175 | sourceTree = "";
176 | };
177 | EB8E8F0B1CD4FA350077C5F3 /* Logic */ = {
178 | isa = PBXGroup;
179 | children = (
180 | EBAE63CC1CCD159E005CF6F8 /* Ekidata.swift */,
181 | );
182 | name = Logic;
183 | sourceTree = "";
184 | };
185 | EB8E8F0C1CD4FA400077C5F3 /* Utilities */ = {
186 | isa = PBXGroup;
187 | children = (
188 | EBAE63D21CD0990A005CF6F8 /* Threading.swift */,
189 | EB84893E1CD8F97B00FC99A8 /* Shortcut.swift */,
190 | );
191 | name = Utilities;
192 | sourceTree = "";
193 | };
194 | /* End PBXGroup section */
195 |
196 | /* Begin PBXNativeTarget section */
197 | EB0E19941CC9A59800FA196E /* EkiBell */ = {
198 | isa = PBXNativeTarget;
199 | buildConfigurationList = EB0E19BF1CC9A59C00FA196E /* Build configuration list for PBXNativeTarget "EkiBell" */;
200 | buildPhases = (
201 | EB0E19911CC9A59800FA196E /* Sources */,
202 | EB0E19921CC9A59800FA196E /* Frameworks */,
203 | EB0E19931CC9A59800FA196E /* Resources */,
204 | EBAE63D11CCD1CB4005CF6F8 /* ShellScript */,
205 | );
206 | buildRules = (
207 | );
208 | dependencies = (
209 | );
210 | name = EkiBell;
211 | productName = EkiBell;
212 | productReference = EB0E19951CC9A59800FA196E /* EkiBell.app */;
213 | productType = "com.apple.product-type.application";
214 | };
215 | EB0E19AA1CC9A59B00FA196E /* EkiBellTests */ = {
216 | isa = PBXNativeTarget;
217 | buildConfigurationList = EB0E19C21CC9A59C00FA196E /* Build configuration list for PBXNativeTarget "EkiBellTests" */;
218 | buildPhases = (
219 | EB0E19A71CC9A59B00FA196E /* Sources */,
220 | EB0E19A81CC9A59B00FA196E /* Frameworks */,
221 | EB0E19A91CC9A59B00FA196E /* Resources */,
222 | );
223 | buildRules = (
224 | );
225 | dependencies = (
226 | EB0E19AD1CC9A59B00FA196E /* PBXTargetDependency */,
227 | );
228 | name = EkiBellTests;
229 | productName = EkiBellTests;
230 | productReference = EB0E19AB1CC9A59B00FA196E /* EkiBellTests.xctest */;
231 | productType = "com.apple.product-type.bundle.unit-test";
232 | };
233 | EB0E19B51CC9A59B00FA196E /* EkiBellUITests */ = {
234 | isa = PBXNativeTarget;
235 | buildConfigurationList = EB0E19C51CC9A59C00FA196E /* Build configuration list for PBXNativeTarget "EkiBellUITests" */;
236 | buildPhases = (
237 | EB0E19B21CC9A59B00FA196E /* Sources */,
238 | EB0E19B31CC9A59B00FA196E /* Frameworks */,
239 | EB0E19B41CC9A59B00FA196E /* Resources */,
240 | );
241 | buildRules = (
242 | );
243 | dependencies = (
244 | EB0E19B81CC9A59B00FA196E /* PBXTargetDependency */,
245 | );
246 | name = EkiBellUITests;
247 | productName = EkiBellUITests;
248 | productReference = EB0E19B61CC9A59B00FA196E /* EkiBellUITests.xctest */;
249 | productType = "com.apple.product-type.bundle.ui-testing";
250 | };
251 | /* End PBXNativeTarget section */
252 |
253 | /* Begin PBXProject section */
254 | EB0E198D1CC9A59700FA196E /* Project object */ = {
255 | isa = PBXProject;
256 | attributes = {
257 | LastSwiftUpdateCheck = 0730;
258 | LastUpgradeCheck = 0730;
259 | ORGANIZATIONNAME = "Basuke Suzuki";
260 | TargetAttributes = {
261 | EB0E19941CC9A59800FA196E = {
262 | CreatedOnToolsVersion = 7.3;
263 | DevelopmentTeam = W79BP686ET;
264 | SystemCapabilities = {
265 | com.apple.BackgroundModes = {
266 | enabled = 1;
267 | };
268 | com.apple.Maps.iOS = {
269 | enabled = 1;
270 | };
271 | };
272 | };
273 | EB0E19AA1CC9A59B00FA196E = {
274 | CreatedOnToolsVersion = 7.3;
275 | TestTargetID = EB0E19941CC9A59800FA196E;
276 | };
277 | EB0E19B51CC9A59B00FA196E = {
278 | CreatedOnToolsVersion = 7.3;
279 | TestTargetID = EB0E19941CC9A59800FA196E;
280 | };
281 | };
282 | };
283 | buildConfigurationList = EB0E19901CC9A59700FA196E /* Build configuration list for PBXProject "EkiBell" */;
284 | compatibilityVersion = "Xcode 3.2";
285 | developmentRegion = English;
286 | hasScannedForEncodings = 0;
287 | knownRegions = (
288 | en,
289 | Base,
290 | );
291 | mainGroup = EB0E198C1CC9A59700FA196E;
292 | productRefGroup = EB0E19961CC9A59800FA196E /* Products */;
293 | projectDirPath = "";
294 | projectRoot = "";
295 | targets = (
296 | EB0E19941CC9A59800FA196E /* EkiBell */,
297 | EB0E19AA1CC9A59B00FA196E /* EkiBellTests */,
298 | EB0E19B51CC9A59B00FA196E /* EkiBellUITests */,
299 | );
300 | };
301 | /* End PBXProject section */
302 |
303 | /* Begin PBXResourcesBuildPhase section */
304 | EB0E19931CC9A59800FA196E /* Resources */ = {
305 | isa = PBXResourcesBuildPhase;
306 | buildActionMask = 2147483647;
307 | files = (
308 | EBAE63C91CCD13DB005CF6F8 /* ekidata.db in Resources */,
309 | EB0E19A51CC9A59B00FA196E /* LaunchScreen.storyboard in Resources */,
310 | EB0E19A21CC9A59B00FA196E /* Assets.xcassets in Resources */,
311 | EB84893D1CD8F90B00FC99A8 /* LineCell.xib in Resources */,
312 | EB0E19A01CC9A59A00FA196E /* Main.storyboard in Resources */,
313 | EB84893B1CD79A8500FC99A8 /* StationCell.xib in Resources */,
314 | );
315 | runOnlyForDeploymentPostprocessing = 0;
316 | };
317 | EB0E19A91CC9A59B00FA196E /* Resources */ = {
318 | isa = PBXResourcesBuildPhase;
319 | buildActionMask = 2147483647;
320 | files = (
321 | EBAE63CA1CCD13DB005CF6F8 /* ekidata.db in Resources */,
322 | );
323 | runOnlyForDeploymentPostprocessing = 0;
324 | };
325 | EB0E19B41CC9A59B00FA196E /* Resources */ = {
326 | isa = PBXResourcesBuildPhase;
327 | buildActionMask = 2147483647;
328 | files = (
329 | EBAE63CB1CCD13DB005CF6F8 /* ekidata.db in Resources */,
330 | );
331 | runOnlyForDeploymentPostprocessing = 0;
332 | };
333 | /* End PBXResourcesBuildPhase section */
334 |
335 | /* Begin PBXShellScriptBuildPhase section */
336 | EBAE63D11CCD1CB4005CF6F8 /* ShellScript */ = {
337 | isa = PBXShellScriptBuildPhase;
338 | buildActionMask = 2147483647;
339 | files = (
340 | );
341 | inputPaths = (
342 | "$(SRCROOT)/Carthage/Build/iOS/SQLite.framework",
343 | );
344 | outputPaths = (
345 | );
346 | runOnlyForDeploymentPostprocessing = 0;
347 | shellPath = /bin/sh;
348 | shellScript = "/usr/local/bin/carthage copy-frameworks\n";
349 | };
350 | /* End PBXShellScriptBuildPhase section */
351 |
352 | /* Begin PBXSourcesBuildPhase section */
353 | EB0E19911CC9A59800FA196E /* Sources */ = {
354 | isa = PBXSourcesBuildPhase;
355 | buildActionMask = 2147483647;
356 | files = (
357 | EB84893F1CD8F97B00FC99A8 /* Shortcut.swift in Sources */,
358 | EB8E8F0A1CD4FA1B0077C5F3 /* LineViewController.swift in Sources */,
359 | EB8E8F081CD4FA080077C5F3 /* StationViewController.swift in Sources */,
360 | EBAE63D31CD0990A005CF6F8 /* Threading.swift in Sources */,
361 | EB8E8F041CD4F9E40077C5F3 /* SearchViewController.swift in Sources */,
362 | EB0E199D1CC9A59900FA196E /* NearbyViewController.swift in Sources */,
363 | EB0E19991CC9A59800FA196E /* AppDelegate.swift in Sources */,
364 | EB0E199B1CC9A59800FA196E /* MapViewController.swift in Sources */,
365 | EB8E8F021CD4F9D10077C5F3 /* FavoriteViewController.swift in Sources */,
366 | EBAE63CD1CCD159E005CF6F8 /* Ekidata.swift in Sources */,
367 | EB8E8F061CD4F9F90077C5F3 /* SettingsViewController.swift in Sources */,
368 | );
369 | runOnlyForDeploymentPostprocessing = 0;
370 | };
371 | EB0E19A71CC9A59B00FA196E /* Sources */ = {
372 | isa = PBXSourcesBuildPhase;
373 | buildActionMask = 2147483647;
374 | files = (
375 | EB0E19B01CC9A59B00FA196E /* EkiBellTests.swift in Sources */,
376 | EBAE63D41CD0990A005CF6F8 /* Threading.swift in Sources */,
377 | EBAE63CE1CCD159E005CF6F8 /* Ekidata.swift in Sources */,
378 | );
379 | runOnlyForDeploymentPostprocessing = 0;
380 | };
381 | EB0E19B21CC9A59B00FA196E /* Sources */ = {
382 | isa = PBXSourcesBuildPhase;
383 | buildActionMask = 2147483647;
384 | files = (
385 | EB0E19BB1CC9A59C00FA196E /* EkiBellUITests.swift in Sources */,
386 | EBAE63D51CD0990A005CF6F8 /* Threading.swift in Sources */,
387 | EBAE63CF1CCD159E005CF6F8 /* Ekidata.swift in Sources */,
388 | );
389 | runOnlyForDeploymentPostprocessing = 0;
390 | };
391 | /* End PBXSourcesBuildPhase section */
392 |
393 | /* Begin PBXTargetDependency section */
394 | EB0E19AD1CC9A59B00FA196E /* PBXTargetDependency */ = {
395 | isa = PBXTargetDependency;
396 | target = EB0E19941CC9A59800FA196E /* EkiBell */;
397 | targetProxy = EB0E19AC1CC9A59B00FA196E /* PBXContainerItemProxy */;
398 | };
399 | EB0E19B81CC9A59B00FA196E /* PBXTargetDependency */ = {
400 | isa = PBXTargetDependency;
401 | target = EB0E19941CC9A59800FA196E /* EkiBell */;
402 | targetProxy = EB0E19B71CC9A59B00FA196E /* PBXContainerItemProxy */;
403 | };
404 | /* End PBXTargetDependency section */
405 |
406 | /* Begin PBXVariantGroup section */
407 | EB0E199E1CC9A59A00FA196E /* Main.storyboard */ = {
408 | isa = PBXVariantGroup;
409 | children = (
410 | EB0E199F1CC9A59A00FA196E /* Base */,
411 | );
412 | name = Main.storyboard;
413 | sourceTree = "";
414 | };
415 | EB0E19A31CC9A59B00FA196E /* LaunchScreen.storyboard */ = {
416 | isa = PBXVariantGroup;
417 | children = (
418 | EB0E19A41CC9A59B00FA196E /* Base */,
419 | );
420 | name = LaunchScreen.storyboard;
421 | sourceTree = "";
422 | };
423 | /* End PBXVariantGroup section */
424 |
425 | /* Begin XCBuildConfiguration section */
426 | EB0E19BD1CC9A59C00FA196E /* Debug */ = {
427 | isa = XCBuildConfiguration;
428 | buildSettings = {
429 | ALWAYS_SEARCH_USER_PATHS = NO;
430 | CLANG_ANALYZER_NONNULL = YES;
431 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
432 | CLANG_CXX_LIBRARY = "libc++";
433 | CLANG_ENABLE_MODULES = YES;
434 | CLANG_ENABLE_OBJC_ARC = YES;
435 | CLANG_WARN_BOOL_CONVERSION = YES;
436 | CLANG_WARN_CONSTANT_CONVERSION = YES;
437 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
438 | CLANG_WARN_EMPTY_BODY = YES;
439 | CLANG_WARN_ENUM_CONVERSION = YES;
440 | CLANG_WARN_INT_CONVERSION = YES;
441 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
442 | CLANG_WARN_UNREACHABLE_CODE = YES;
443 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
444 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
445 | COPY_PHASE_STRIP = NO;
446 | DEBUG_INFORMATION_FORMAT = dwarf;
447 | ENABLE_STRICT_OBJC_MSGSEND = YES;
448 | ENABLE_TESTABILITY = YES;
449 | GCC_C_LANGUAGE_STANDARD = gnu99;
450 | GCC_DYNAMIC_NO_PIC = NO;
451 | GCC_NO_COMMON_BLOCKS = YES;
452 | GCC_OPTIMIZATION_LEVEL = 0;
453 | GCC_PREPROCESSOR_DEFINITIONS = (
454 | "DEBUG=1",
455 | "$(inherited)",
456 | );
457 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
458 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
459 | GCC_WARN_UNDECLARED_SELECTOR = YES;
460 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
461 | GCC_WARN_UNUSED_FUNCTION = YES;
462 | GCC_WARN_UNUSED_VARIABLE = YES;
463 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
464 | MTL_ENABLE_DEBUG_INFO = YES;
465 | ONLY_ACTIVE_ARCH = YES;
466 | SDKROOT = iphoneos;
467 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
468 | };
469 | name = Debug;
470 | };
471 | EB0E19BE1CC9A59C00FA196E /* Release */ = {
472 | isa = XCBuildConfiguration;
473 | buildSettings = {
474 | ALWAYS_SEARCH_USER_PATHS = NO;
475 | CLANG_ANALYZER_NONNULL = YES;
476 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
477 | CLANG_CXX_LIBRARY = "libc++";
478 | CLANG_ENABLE_MODULES = YES;
479 | CLANG_ENABLE_OBJC_ARC = YES;
480 | CLANG_WARN_BOOL_CONVERSION = YES;
481 | CLANG_WARN_CONSTANT_CONVERSION = YES;
482 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
483 | CLANG_WARN_EMPTY_BODY = YES;
484 | CLANG_WARN_ENUM_CONVERSION = YES;
485 | CLANG_WARN_INT_CONVERSION = YES;
486 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
487 | CLANG_WARN_UNREACHABLE_CODE = YES;
488 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
489 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
490 | COPY_PHASE_STRIP = NO;
491 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
492 | ENABLE_NS_ASSERTIONS = NO;
493 | ENABLE_STRICT_OBJC_MSGSEND = YES;
494 | GCC_C_LANGUAGE_STANDARD = gnu99;
495 | GCC_NO_COMMON_BLOCKS = YES;
496 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
497 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
498 | GCC_WARN_UNDECLARED_SELECTOR = YES;
499 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
500 | GCC_WARN_UNUSED_FUNCTION = YES;
501 | GCC_WARN_UNUSED_VARIABLE = YES;
502 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
503 | MTL_ENABLE_DEBUG_INFO = NO;
504 | SDKROOT = iphoneos;
505 | VALIDATE_PRODUCT = YES;
506 | };
507 | name = Release;
508 | };
509 | EB0E19C01CC9A59C00FA196E /* Debug */ = {
510 | isa = XCBuildConfiguration;
511 | buildSettings = {
512 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
513 | CODE_SIGN_IDENTITY = "iPhone Developer";
514 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
515 | FRAMEWORK_SEARCH_PATHS = (
516 | "$(inherited)",
517 | "$(SRCROOT)",
518 | "$(PROJECT_DIR)/Carthage/Build/iOS",
519 | );
520 | INFOPLIST_FILE = EkiBell/Info.plist;
521 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
522 | PRODUCT_BUNDLE_IDENTIFIER = com.basuke.ios.EkiBell;
523 | PRODUCT_NAME = "$(TARGET_NAME)";
524 | PROVISIONING_PROFILE = "";
525 | };
526 | name = Debug;
527 | };
528 | EB0E19C11CC9A59C00FA196E /* Release */ = {
529 | isa = XCBuildConfiguration;
530 | buildSettings = {
531 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
532 | CODE_SIGN_IDENTITY = "iPhone Developer";
533 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
534 | FRAMEWORK_SEARCH_PATHS = (
535 | "$(inherited)",
536 | "$(SRCROOT)",
537 | "$(PROJECT_DIR)/Carthage/Build/iOS",
538 | );
539 | INFOPLIST_FILE = EkiBell/Info.plist;
540 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
541 | PRODUCT_BUNDLE_IDENTIFIER = com.basuke.ios.EkiBell;
542 | PRODUCT_NAME = "$(TARGET_NAME)";
543 | PROVISIONING_PROFILE = "";
544 | };
545 | name = Release;
546 | };
547 | EB0E19C31CC9A59C00FA196E /* Debug */ = {
548 | isa = XCBuildConfiguration;
549 | buildSettings = {
550 | BUNDLE_LOADER = "$(TEST_HOST)";
551 | INFOPLIST_FILE = EkiBellTests/Info.plist;
552 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
553 | PRODUCT_BUNDLE_IDENTIFIER = com.basuke.ios.EkiBellTests;
554 | PRODUCT_NAME = "$(TARGET_NAME)";
555 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/EkiBell.app/EkiBell";
556 | };
557 | name = Debug;
558 | };
559 | EB0E19C41CC9A59C00FA196E /* Release */ = {
560 | isa = XCBuildConfiguration;
561 | buildSettings = {
562 | BUNDLE_LOADER = "$(TEST_HOST)";
563 | INFOPLIST_FILE = EkiBellTests/Info.plist;
564 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
565 | PRODUCT_BUNDLE_IDENTIFIER = com.basuke.ios.EkiBellTests;
566 | PRODUCT_NAME = "$(TARGET_NAME)";
567 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/EkiBell.app/EkiBell";
568 | };
569 | name = Release;
570 | };
571 | EB0E19C61CC9A59C00FA196E /* Debug */ = {
572 | isa = XCBuildConfiguration;
573 | buildSettings = {
574 | INFOPLIST_FILE = EkiBellUITests/Info.plist;
575 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
576 | PRODUCT_BUNDLE_IDENTIFIER = com.basuke.ios.EkiBellUITests;
577 | PRODUCT_NAME = "$(TARGET_NAME)";
578 | TEST_TARGET_NAME = EkiBell;
579 | };
580 | name = Debug;
581 | };
582 | EB0E19C71CC9A59C00FA196E /* Release */ = {
583 | isa = XCBuildConfiguration;
584 | buildSettings = {
585 | INFOPLIST_FILE = EkiBellUITests/Info.plist;
586 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
587 | PRODUCT_BUNDLE_IDENTIFIER = com.basuke.ios.EkiBellUITests;
588 | PRODUCT_NAME = "$(TARGET_NAME)";
589 | TEST_TARGET_NAME = EkiBell;
590 | };
591 | name = Release;
592 | };
593 | /* End XCBuildConfiguration section */
594 |
595 | /* Begin XCConfigurationList section */
596 | EB0E19901CC9A59700FA196E /* Build configuration list for PBXProject "EkiBell" */ = {
597 | isa = XCConfigurationList;
598 | buildConfigurations = (
599 | EB0E19BD1CC9A59C00FA196E /* Debug */,
600 | EB0E19BE1CC9A59C00FA196E /* Release */,
601 | );
602 | defaultConfigurationIsVisible = 0;
603 | defaultConfigurationName = Release;
604 | };
605 | EB0E19BF1CC9A59C00FA196E /* Build configuration list for PBXNativeTarget "EkiBell" */ = {
606 | isa = XCConfigurationList;
607 | buildConfigurations = (
608 | EB0E19C01CC9A59C00FA196E /* Debug */,
609 | EB0E19C11CC9A59C00FA196E /* Release */,
610 | );
611 | defaultConfigurationIsVisible = 0;
612 | defaultConfigurationName = Release;
613 | };
614 | EB0E19C21CC9A59C00FA196E /* Build configuration list for PBXNativeTarget "EkiBellTests" */ = {
615 | isa = XCConfigurationList;
616 | buildConfigurations = (
617 | EB0E19C31CC9A59C00FA196E /* Debug */,
618 | EB0E19C41CC9A59C00FA196E /* Release */,
619 | );
620 | defaultConfigurationIsVisible = 0;
621 | defaultConfigurationName = Release;
622 | };
623 | EB0E19C51CC9A59C00FA196E /* Build configuration list for PBXNativeTarget "EkiBellUITests" */ = {
624 | isa = XCConfigurationList;
625 | buildConfigurations = (
626 | EB0E19C61CC9A59C00FA196E /* Debug */,
627 | EB0E19C71CC9A59C00FA196E /* Release */,
628 | );
629 | defaultConfigurationIsVisible = 0;
630 | defaultConfigurationName = Release;
631 | };
632 | /* End XCConfigurationList section */
633 | };
634 | rootObject = EB0E198D1CC9A59700FA196E /* Project object */;
635 | }
636 |
--------------------------------------------------------------------------------