Slide 1

Slide 1 text

.BOBHFNFOUPG &OWJSPONFOU7BSJBCMFT XJUI:".-T 4XJGUѪ޷ձWPM

Slide 2

Slide 2 text

struct Me { let name = "Takuhiro Muta" let aka = "417.72KI" let experienceYears = 5 let company = "iRidge inc." let twitter = "417_72ki" let qiita = "417_72ki" let gitHub = "417-72KI" let like = [ "BEMANI", "Real Escape Game", "Bang Dream!", "LoveLive! Sunshine!!", "etc…" ] } TFMGEFTDSJQUJPO

Slide 3

Slide 3 text

$BVUJPO

Slide 4

Slide 4 text

%FpOJUJPOGPS &OWJSPONFOU7BSJBCMFTJOUIJTTFTTJPO w ❌ w 130%6$5@#6/%-&@*%&/5*'*&3 w 05)&3@48*'5@'-"(4 w FUDʜ w ⭕ w )PTUGPS"1* w $VTUPNFS,FZ4FDSFU w FUDʜ

Slide 5

Slide 5 text

5PNBOBHF FOWJSPONFOUWBSJBCMFT w YDDPOpH w 6TFS%FpOFE w 1SFQSPDFTTPS.BDSPT w 0UIFS4XJGU'MBHT

Slide 6

Slide 6 text

#

Slide 7

Slide 7 text

8IZOPU YDDPOpH6TFS%FpOFE w 7BSJBCMFTEFpOFEJOUIFNBSFBMTPOFFEFE UPCFEFpOFEJO*OGPQMJTU w 3JTLPGUZQPDSBTI
 w *OGPQMJTUJTUIFpMFUPNBOBHF l*OGPSNBUJPOz let hoge = Bundle.main.object(forInfoDictionaryKey: "Hogehoge") as! String

Slide 8

Slide 8 text

8JTI "1*ZNM XFC@VSMZNM DPOGZNM

Slide 9

Slide 9 text

#VJME$POpHTXJGU

Slide 10

Slide 10 text

#VJME$POpHTXJGU w $-*UPPMGPS"OESPJEMJLFNBOBHJOHFOWJSPONFOUWBSJBCMFT w .BOBHFWBSJBCMFTVTJOH:".-T+40/T w $BOSFQSFTFOUFOWJSPONFOUWBSJBCMFTJOBIJFSBSDIJDBM TUSVDUVSF w "VUPHFOFSBUF1MJTUBOE4XJGUpMF w (FUTUSPOHUZQFEBVUPDPNQMFUFE
 FOWJSPONFOUWBSJBCMFT w 3FTQFDUJOH3TXJGU Т

Slide 11

Slide 11 text

#VJME$POpHTXJGU "1*ZNM XFC@VSMZNM DPOGZNM #VJME$POpHQMJTU #VJME$POpHHFOFSBUFETXJGU

Slide 12

Slide 12 text

4PVSDF:".-T is_debug: true cognito: provider_key: DevHogeProvider client_id: devhogeclient pool_id: ap-northeast-devhoge region_name: ap-northeast-1 CBTFZNM DPHOJUPZNM web_front: terms: https://dev.~ faq: https://dev.~ privacy: https://dev.~ XFC@GSPOUZNM is_debug: false cognito: provider_key: HogeProvider client_id: hogeclient pool_id: ap-northeast-hoge region_name: ap-northeast-1 web_front: terms: https://prod.~ faq: https://prod.~ privacy: https://prod.~ FOWQSPEVDUJPOZNM

Slide 13

Slide 13 text

3VO4DSJQU

Slide 14

Slide 14 text

3VO4DSJQU if [ "${CONFIGURATION}" = 'Release' ]; then ENVIRONMENT='production' elif [ "${CONFIGURATION}" = 'AdHoc' ]; then ENVIRONMENT='staging' else ENVIRONMENT='development' fi ${PODS_ROOT}/BuildConfig.swift/buildconfigswift -o ${SRCROOT}/Libs/BuildConfig_swift -e $ENVIRONMENT ${SRCROOT}/Resources/Config

Slide 15

Slide 15 text

3VO4DSJQU if [ "${CONFIGURATION}" = 'Release' ]; then ENVIRONMENT='production' elif [ "${CONFIGURATION}" = 'AdHoc' ]; then ENVIRONMENT='staging' else ENVIRONMENT='development' fi ${PODS_ROOT}/BuildConfig.swift/buildconfigswift -o ${SRCROOT}/Libs/BuildConfig_swift -e $ENVIRONMENT ${SRCROOT}/Resources/Config 4FUFOWJSPONFOUDPSSFTQPOEJOHUP#VJME$POpHVSBUJPO

Slide 16

Slide 16 text

3VO4DSJQU if [ "${CONFIGURATION}" = 'Release' ]; then ENVIRONMENT='production' elif [ "${CONFIGURATION}" = 'AdHoc' ]; then ENVIRONMENT='staging' else ENVIRONMENT='development' fi ${PODS_ROOT}/BuildConfig.swift/buildconfigswift -o ${SRCROOT}/Libs/BuildConfig_swift -e $ENVIRONMENT ${SRCROOT}/Resources/Config 4FUPVUQVUEJSFDUPSZ

Slide 17

Slide 17 text

3VO4DSJQU if [ "${CONFIGURATION}" = 'Release' ]; then ENVIRONMENT='production' elif [ "${CONFIGURATION}" = 'AdHoc' ]; then ENVIRONMENT='staging' else ENVIRONMENT='development' fi ${PODS_ROOT}/BuildConfig.swift/buildconfigswift -o ${SRCROOT}/Libs/BuildConfig_swift -e $ENVIRONMENT ${SRCROOT}/Resources/Config 4FUEJSFDUPSZDPOUBJOTSFTPVSDF:".-T

Slide 18

Slide 18 text

#VJME$POpHQMJTU EFWFMPQNFOU

Slide 19

Slide 19 text

#VJME$POpHQMJTU QSPEVDUJPO

Slide 20

Slide 20 text

#VJME$POpHQMJTU QSPEVDUJPO w #JOBSZGPSNBUCZUFT w 9.-GPSNBUCZUFT

Slide 21

Slide 21 text

#VJME$POpHHFOFSBUFETXJGU struct BuildConfig: Codable { static let `default`: BuildConfig = .load() let cognito: Cognito let isDebug: Bool let webFront: WebFront } extension BuildConfig { struct Cognito: Codable { let clientId: String let poolId: String let providerKey: String let regionName: String } } extension BuildConfig { struct WebFront: Codable { let faq: String let privacy: String let terms: String } }

Slide 22

Slide 22 text

$BMMJOHFYBNQMF let url = URL(string: BuildConfig.default.webFront.faq)! webView.load(URLRequest(url: url))

Slide 23

Slide 23 text

$VSSFOUUBTL w $BOOPUQBSTFA%PVCMFA w 4VQQPSU.JOUJOTUBMMBUJPO w &TDBQFLFZTXJUISFTFSWFEXPSET w %FNP"QQ

Slide 24

Slide 24 text

"OESPJEMJLF

Slide 25

Slide 25 text

"OESPJE`T#VJME$POpH w 4FUCVJME$POpH'JFMEJOCVJMEHSBEMF w $BOTFUGPSFBDICVJME5ZQFQSPEVDU'MBWPS

Slide 26

Slide 26 text

CVJMEHSBEMF buildTypes { debug { buildConfigField 'boolean', 'ACCESS_LOG', 'false' buildConfigField 'String', 'WEBAPI_URL', '"http://dev.example.com/api/"' } release { buildConfigField 'boolean', 'ACCESS_LOG', 'true' buildConfigField 'String', 'WEBAPI_URL', '"http://example.com/api/"' } }

Slide 27

Slide 27 text

#VJME$POpHKBWB EFCVH public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean(“true"); ɾ ɾ ɾ // Fields from build type: debug public static final boolean ACCESS_LOG = false; public static final String WEBAPI_URL = "http://dev.example.com/api/"; }

Slide 28

Slide 28 text

#VJME$POpHKBWB SFMFBTF public final class BuildConfig { public static final boolean DEBUG = false; ɾ ɾ ɾ // Fields from build type: release public static final boolean ACCESS_LOG = true; public static final String WEBAPI_URL = "http://example.com/api/"; }

Slide 29

Slide 29 text

IUUQTHJUIVCDPN,*#VJME$POpHTXJGU