React Native(iOS)中的配置环境

งองปีที่ผ่านมาคงจะปฏิเสธไม่ได้ว่าการสร้างMobile Applicationนั้นมีความหลากหลามายมากขึ้นativeยึดติดในเรื่อื่องขาษา(母语)ีกต่อีกต่อไป ที่เรียกว่า跨平台อีกด้วยเรียกได้ว่าเทคโนโลยีได้เปลี่ยนแปลง หลายๆอย่างทำให้เราทำงานได้สะดวกขึ้นเร็วขึ้นง่ายขึ้นแต่ยังแฝงไปด้วยความเจ็บปวดในการพัฒนาแอพที่ดีมากขึ้นอีกด้ ย

Xamarinหรือ离子框架แต่รแต่นนำมาทั้งหมดReact

งนบทความนี้ผมจะมาาในสิ่งที่มีความสำคัญในการสร้าง跨平台应用程序自动化构建工具ต่างๆและที่สำคัญมันต้องทำงานได้ทั้งสองแพลตฟอร์ม

ให้อนที่จะเริ่มเราลองมาคิดกันเล่นๆก่อนว่าแอพของเรานั้นต้องการให้建立ใน环境ใดบ้างนdevelopmentนdevelopmentน开发,分阶段,生产เพราะสิ่งเหล่านี้เราจะส่งมันไปบอกJSเพื่อให้จัดการต่อ


ิ่มที่ฝั่งiOSิ่มที่ฝั่งนก่อนซึ่งแน่นอนมันจะต้องเริ่มด้วยการ设置ได้ใช้าบางอย่างบนXcode Projectก่อนที่จะBridgeและส่งไปให้ฝั่งได้ใช้

-าเราใช้react-native cliในการgenerate appเราเConfigurationสองตัวก็คือDebug / Releaseเป็นมาตราฐาน แต่ในครั้งนี้เราต้องการ临时环境ด้วย ด้วราเพิ่มเข้าไปก่อนโดยโดองDuplicate Release

agingากนั้นให้เราเปลี่ยนชื่อมันเป็น 暂存 ได้เลอง重复发布มาก็เพราะว่าเวลาbuild对nativeนั้นตัวมันเองจะdependentกับconfigบาบอย่างในbuildนั้นๆซึ่งครั้งนี้เราต้องการนขนงอ

Configurationอนนี้เราสร้างBuild Configurationเรียบร้อยแล้วเพื่อใช้สำหรับกำหนดbuild configในการ编译ดังนั้นเราจะใช้ 用户定义的设置 ของXcodeในการเก็บ环境ซึ่งผมจะตั้งชื่อ关键ของมันว่า BUILD_ENV เพื่อใช้ใ developmentอ 开发,演出,生产 ส่วนวิธีสร้างให้เรามองหาBuild Settingของ Project แบบนี้

codeาcodeรยังไม่ทราบXcodeนั้นจะแบ่งการเก็บค่าของ设置มางๆไว้สองส่วนคือส่วนที่เป็นระดับProject(ใองง่ายๆคือGlobal)และส่วนที่เป็นTargets(ในระดับschemeต่างๆเพราะเราสามารมถ构建应用程序ได้หลายschemeหลาย配置ProjectนProjectเดียว)

บกับฝั่งาเปรียบกับฝั่งAndroidมันก็จะคล้ายกับไฟล์build.gradleของProjectและbuild.gradleของAppนั่นเองครับApp

Defineา+นั้นให้กดเครื่องหมาย“ +”เพื่อสร้าง用户定义设置ขึ้นมาใหม่值valueของแต่ละconfigเป็นชื่อของenvต้ราต้องการ( 开发,暂存,生产

用户定义的设置ถราสร้างไว้ข้างต้นั้นั้นมันจะไม่สามารถ访问จาก代码ได้โดยตรง (ไม่สามารถเขียนcodeเพื่อดึงkey / val ออก มา) เพราะหน้าที่ของมันเป็นเพียงแค่เก็บConfigที่ใช้ในการbuildเท่านั้น

ไฟล์นpนซึ่งผมจะใช้ชื่ราจึงต้องสร้างตัวแปรเก็บไว้ในไฟล์ Info.plist ซึ่งผมจะใช้ BuildEnvironment keyเป็น BuildEnvironment และvalueเป็น $(BUILD_ENV) การสร้างตัวแปรแบบนี้ในplist文件ซึ่งมันจะถูกนำไปmapเข้ากับconfigขอกับราโดยอัตโนัตโ นั่นหมายความว่าเาเราจะสามารถเขียนcodeให้ดึง变量ออกมาได้ง่าย

มีอนนี้เรามี关键pนplistที่ชื่อว่า BuildEnvironment ถึงเวลา BuildEnvironment เวลราต้องสร้างNative Moduleดึงนมาเพื่อดึง值จาก plist file แล้วbridgeกลับส่งไปให้JSรับรู้และเรีรู้และเยกใช้ต่อไป

Nativeอดีอีกอย่างของReact Nativeงอเราสามารถสร้างNative Moduleฝั่งางๆเพื่อนำมาใช้งานต่อในฝั่งReact JS API API ReactนเขียนReact-Nativeควรมีพื้นฐานภาษาและเข้าใจAnatomyต่างๆเหล่านี้มาพอสมควร)

类别类别RNConfig.h subclass เป็น NSObject subclass NS RNConfig.h NSObject

งนการสร้างNative模块นั้นfacebookได้แนะนำไว้ให้เราแล้วตามนี้https://facebook.github.io/react-native/docs/native-modules-ios.htmlซึ่งจะมีตัวอย่างการ实现implementนี้

environmentอนี้เราสามารถเปลี่ยน生成环境ได้อย่างง่ายๆแล้วแค่กำหนดbuild configก่อนการbuildในแต่ละครั้ง(สามารถทำบนcliได้ได้นกรณีทำCIด้วยด้ว xcodebuild -workspace "ios/MYApp.xcworkspace" -configuration "Staging" "clean" "archive"ในบทความนี้ถ้าจะนำไปใช้จริงควรใช้วิธีเพิ่ม建立目标方案ขึ้นมาอีกตัวจะได้สามารถแยกBuild versionได้อย่างเจาะจงมาะจงมากขึ้นครับ ส่วนในบทความต่อไปจะพูดถึงวิธีในการ งฝั่งองฝั่งAndroidกันบ้างว่ามีอะไรบ้าง…รอติดตามครับ