├── 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 | --------------------------------------------------------------------------------