Xcode рдФрд░ рдЯреНрд░реИрд╡рд┐рд╕: рдХрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓ рд░рд╣рд╛ рд╣реИ

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрд╕ рдиреЛрдЯ рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдПрдХ рд╡рд╛рдХреНрдп рдореЗрдВ рдлрд┐рдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: "рдЪреВрдВрдХрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╕рднреА рд╕рдВрднрд╡ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдЪрд▓рд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдФрд░ рдПрдХ рдПрдХрд▓ рдкрд░ рдирд╣реАрдВред" рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдм рдкрд░ рдПрдХрд▓-рдкрдВрдХреНрддрд┐ рд▓реЗрдЦреЛрдВ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рдШреБрдЧрдгрдХ рдХреЗ рдЕрдиреБрдкрд╛рдд рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЖрддреНрдорд╕рд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкреНрд░рдХрдЯ рдХрд░реВрдВрдЧрд╛ред


рдкрд░рд┐рдЪрдп


рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреАрдбрд╝реЗ рдкрд╕рдВрдж рд╣реИрдВ? рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдорд╛рдирддрд╛ рд╣реВрдВ: рд╡рд╕рд╛ рдХреЗ рд░рд╕рджрд╛рд░ рдШрд╛рддрдХ рдХреАрдбрд╝реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдирдВрдж рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдпрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдПрдХ рд░рд┐рд▓реАрдЬ рдЬрд╛рд░реА рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реЗ рдЫреЛрдЯреЗ рдХреАрдбрд╝реЗ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдирдЧреНрди рдЖрдВрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреЛ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЦреБрдж рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдУрдПрд╕ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдкрд░, рдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдиреБрдХреВрд▓рди рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИред рдпреЗ рдЫреЛрдЯреЗ рдмрджрдорд╛рд╢, рдмрд┐рдирд╛ рдкрдХрдбрд╝реЗ, рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЦреВрди рдкреАрдиреЗ рдФрд░ рд░рд╛рдд рдореЗрдВ рдиреАрдВрдж рдЦрд░рд╛рдм рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА рд░реВрдк рд╕реЗ, рдХрдо рдЕрдХреНрд╕рд░ рдПрдХ рдмрдЧ рд╕реНрд╡рдпрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЕрдзрд┐рдХ рдмрд▓ рдХрднреА-рдХрднреА рдЗрд╕рдХреЗ рдХрдмреНрдЬреЗ рдФрд░ рдЙрдиреНрдореВрд▓рди рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдУрдПрд╕ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ, рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рд╕рдВрдХрд▓рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рдкреВрд░реЗ рд╕реЗрдЯ рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрдЧрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, GitHub рдкрд░ рджрд░реНрдЬрдиреЛрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рддреНрд╡рд░рд┐рдд рдирд┐рд░реАрдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрдорд┐рдЯ ( рдЯреНрд░реИрд╡рд┐рд╕-рд╕реАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рд░рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЕрднреА рднреА рдХреЗрд╡рд▓ iOS рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдХрд╛рдЗрдпрд╛рдБ OS X рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдорд┐рдд рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, Xcode 5 рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдХрдВрдЯреАрдиреНрдпреВрдЕрд╕ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреЛ рдХрдИ рд╕рд┐рдореБрд▓реЗрдЯрд░реЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рд▓рдЪреАрд▓рд╛рдкрди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрдИ рдЗрд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рдереЗред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд╣реАрдВ рдорд╛рдиреЗрдВрдЧреЗ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИред

xcodebuild


рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдо xcodebuild рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ Xcode рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдкрд╣рд▓реЗ, рдлреЗрд╕рдмреБрдХ рд╕реЗ рд╕рдмрд╕реЗ рдкрд╕рдВрджреАрджрд╛ xctool , рдХреНрдпреЛрдВрдХрд┐ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, xcodebuild рддрдВрдмреВрд░рд╛ рдФрд░ рдиреГрддреНрдп рдХреЗ рдмрд┐рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, xctool рдЕрдзрд┐рдХ рд╕реБрдЦрдж рдирд┐рд╖реНрдХрд░реНрд╖ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, Xcode 5 рдХреА рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде, рд╕реНрдерд┐рддрд┐ рдореВрд▓ xcodebuild рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрджрд▓ рдЧрдИ: рдЯреИрдореНрдмреЙрд░реАрди рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдИ, рдФрд░ xctool рдЗрд╕ рд╕рдордп рдЖрдкрдХреЛ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ , рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрд╖рдг рд╣реИред

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░реАрдХреНрд╖рдг рдХрдорд╛рдВрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
xcodebuild test -project {project}.xcodeproj -scheme {scheme} -sdk iphonesimulator -destination OS=6.0,name=iPhone -configuration Release 

рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ (рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░), рдпреЛрдЬрдирд╛, рдПрд╕рдбреАрдХреЗ, рдУрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг, рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдирд╛рдо рдФрд░ рдбреАрдмрдЧ / рд░рд┐рд▓реАрдЬрд╝ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред

рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдиреНрдпрд╛рд╕реЛрдВ рдХрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 5.0 рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд▓рдХреНрд╖реНрдп рд╣реИ, рдФрд░ рд╣рдо iOS рдФрд░ OS X рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ):

 for configuration in Release Debug do for device in "iPhone" "iPad" do for iosversion in 6.0 6.1 5.0 5.1 do test_ios iOSTests "$iosversion" "$device" "$configuration" done done for device in "iPhone Retina (3.5-inch)" "iPhone Retina (4-inch)" "iPad Retina" do for iosversion in 6.0 6.1 7.0 do test_ios iOSTests "$iosversion" "$device" "$configuration" done done for device in "iPhone Retina (4-inch 64-bit)" "iPad Retina (64-bit)" do test_ios iOSTests-64bit 7.0 "$device" "$configuration" done test_osx OSXTests "$configuration" done 
(test_ios рдФрд░ test_osx - рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкреВрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг GitHol рдкрд░ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ)

рдпрд╣ рд╣рдореЗрдВ 40 рд╕рдВрднрд╡ рд╡рд┐рдиреНрдпрд╛рд╕ рджреЗрдЧрд╛, рдЬреЛ рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЗрдорд╛рдиреА рд▓рдЧрддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрдХреВрд▓рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдпрд╛ рдпреВрдЖрдИ рдкрд░ рддрд░реНрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдмрд╣реБрдд рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдк рд╕рд┐рд╕реНрдЯрдо рдХреЛ OS X Mavericks рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рддреЛ рдЖрдк рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рдХрд┐ iOS 5 рд╕рд┐рдореБрд▓реЗрдЯрд░ рдиреЗ рдЗрд╕ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдХреБрд▓, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдиреНрдпрд╛рд╕реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ:
рддрд░реНрдХ рдкрд░реАрдХреНрд╖рдгiOS 6.0iOS 6.1iOS 7.0iOS 7.0 64-рдмрд┐рдЯрдУрдПрд╕ рдПрдХреНрд╕
рд░рд┐рд╣рд╛рдИтЬУтЬУтЬУтЬУтЬУ
рдбрд┐рдмрдЧтЬУтЬУтЬУтЬУтЬУ
рдпреВрдЖрдИ рдЯреЗрд╕реНрдЯiPhoneрдЖрдИрдкреИрдбiPhone рд░реЗрдЯрд┐рдирд╛ (3.5 рдЗрдВрдЪ)iPhone рд░реЗрдЯрд┐рдирд╛ (4 рдЗрдВрдЪ)рдЖрдИрдкреИрдб рд░реЗрдЯрд┐рдирд╛
iOS 6.0тЬУтЬУтЬУтЬУтЬУ
iOS 7.0тЬУтЬУтЬУтЬУ
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдЧрд╛, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИред

рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЧрд┐рдирдиреЗ рдФрд░ рдкрд╣рд▓реА рд╡рд┐рдлрд▓рддрд╛ рдкрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдВрдзрди рдЬреЛрдбрд╝рдирд╛, рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг:
test-main-configurations.sh
 #!/bin/sh # Global settings project=XCode/TravisCI.xcodeproj 

рд╕реНрд╡рд░реВрдкрдг рдЙрддреНрдкрд╛рджрди
 function red() { eval "$1=\"$(tput setaf 1)$2$(tput sgr 0)\"" } function green() { eval "$1=\"$(tput setaf 2)$2$(tput sgr 0)\"" } function yellow() { eval "$1=\"$(tput setaf 3)$2$(tput sgr 0)\"" } function bold() { eval "$1=\"$(tput bold)$2$(tput sgr 0)\"" } function echo_fmt() { local str=$1 local color=$2 local bold=$3 if [ "$color" != '' ]; then $color str "$str" fi if [ "$bold" != '' ]; then $bold str "$str" fi echo $str } 

рдкрд░реАрдХреНрд╖рдг
 succeeded_count=0 function test() { local options="$@" echo_fmt "xcodebuild test -project $project $options" yellow xcodebuild test -project $project "$@" local exitcode=$? if [[ $exitcode != 0 ]] ; then echo_fmt "xcodebuild exited with code $exitcode" red echo_fmt "=== TESTS FAILED ===" red bold exit 1 else ((succeeded_count++)) fi } function test_ios() { local scheme=$1 local iosversion=$2 local device="$3" local configuration=$4 shift 4 echo_fmt "=== TEST SCHEME $scheme IOS $iosversion DEVICE $device CONFIGURATION $configuration ===" yellow bold test -scheme "$scheme" \ -sdk iphonesimulator \ -destination OS="$iosversion",name="$device" \ -configuration "$configuration" \ "$@" } function test_osx() { local scheme=$1 local configuration=$2 shift 2 echo_fmt "=== TEST SCHEME $scheme OSX CONFIGURATION $configuration ===" yellow bold test -scheme "$scheme" -configuration "$configuration" "$@" } 

 # Logic tests for configuration in Release Debug do for iosversion in 6.0 6.1 7.0 #5.0 5.1 # Mavericks does not support iOS 5 Simulator do test_ios "iOSLogicTests" "$iosversion" "iPad Retina" "$configuration" done test_ios "iOSLogicTests-64bit" 7.0 "iPad Retina (64-bit)" "$configuration" ONLY_ACTIVE_ARCH=YES test_osx "OSXTests" "$configuration" done # UI tests test_ios "iOSUITests" 6.0 "iPhone" Debug for device in "iPad" "iPhone Retina (3.5-inch)" "iPhone Retina (4-inch)" "iPad Retina" do for iosversion in 6.0 7.0 do test_ios "iOSUITests" "$iosversion" "$device" Debug done done # Result echo_fmt "=== SUCCEEDED $succeeded_count CONFIGURATIONS. ===" green bold 

рдХреМрди рд╕рд╛ рд▓реЙрдиреНрдЪ:
 ./Script/test-main-configurations.sh 
рд╣рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд░рд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рджреЗрдЧрд╛:
=== 19 рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ ===
рдпрд╛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢:
=== TESTS рдлреЗрд▓ ===

IOS 64-рдмрд┐рдЯ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдЧ рдХреЗ рдХрд╛рд░рдг, Xcode рдЕрдХреНрд╕рд░ 64-рдмрд┐рдЯ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдЬреАрдм рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╢рдкрде рд▓реЗрддрд╛ рд╣реИ:

рдпрд╣ рдЕрдкрдорд╛рди рдкрд░реАрдХреНрд╖рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдбреАрдмрдЧ / рд░рд┐рд▓реАрдЬрд╝) рдХреЗ рд▓рд┐рдП " рдХреЗрд╡рд▓ рд╕рдХреНрд░рд┐рдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдмрдирд╛рдПрдБ" = "рд╣рд╛рдБ" рд╕реЗрдЯ рдХрд░рдХреЗ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, 64-рдмрд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ ONLY_ACTIVE_ARCH=YES рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рд╣реИред

XCode


рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдПрдХ рдЕрд▓рдЧ рд▓рдХреНрд╖реНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Xcode рдореЗрдВ, рд▓рдХреНрд╖реНрдп рдЬреЛрдбрд╝реЗрдВ ... -> рдЕрдиреНрдп -> рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░реЗрдВ, рдлрд┐рд░ рд╕рдВрдкрд╛рджрдХ -> рдмрд┐рд▓реНрдб рдЪрд░рдг рдЬреЛрдбрд╝реЗрдВ -> рд░рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд┐рд▓реНрдб рдЪрд░рдг рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдирд┐рдореНрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ:
 cd ${SRCROOT}/.. #     scriptname="test-main-configurations" script="Script/${scriptname}.sh" log="Script/${scriptname}.log" $script > $log #  ,     if [[ $? != 0 ]] ; then #    , ... echo "error: TESTS FAILED" # ...     , ... exit 1 else rm $log # ...     fi 


рдЕрдм, рдпрджрд┐ рдЗрд╕ рд▓рдХреНрд╖реНрдп (if + B ) рдХреА рдЕрд╕реЗрдВрдмрд▓реА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИ, рддреЛ рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд░рд┐рдд рд╣реЛ рдЧрдП рд╣реИрдВ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ Scripts / test-main-configurations.log рд▓реЙрдЧ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реИред
рдмреЗрд╢рдХ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЗрдЪреНрдЫрд╛рд╢рдХреНрддрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдирдИ рд░рд┐рд▓реАрдЬ рдЬрд╛рд░реА рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдЕрдирд┐рд╡рд╛рд░реНрдп рдХрджрдо рдмрдирд╛рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реАрдЬ рдбреАрд╡реАрд╕реАрдПрд╕ рд╢рд╛рдЦрд╛ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдмрд┐рд▓реНрдб рдЪрд░рдг рдЬреЛрдбрд╝рдХрд░ред

рдЯреНрд░реИрд╡рд┐рд╕-рд╕реАрдЖрдИ


рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рд╣реИ рдЬрдм рдкрд░реАрдХреНрд╖рдг рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдЯреНрд░реИрд╡рд┐рд╕-рд╕реАрдЖрдИ рдПрдХреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рд╕реНрдерд╛рдкрд┐рдд рдХреА рд╣реИ, рдЬреЛ рдЧрд┐рдЯрд╣рдм рдкрд░ рд╣рд░ рдзрдХреНрдХрд╛ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдЧреАред рдореИрдВрдиреЗ рдмрд╣реБрдд рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЗрдЦ рдерд╛ , рдореИрдВ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред

рд╣рдореЗрдВ рдХреЗрд╡рд▓ .travis.yml рдлрд╝рд╛рдЗрд▓ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд░реВрдЯ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдЬреЛ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 language: objective-c script: Script/test-main-configurations.sh 

рдЦреИрд░, рдЯреНрд░реИрд╡рд┐рд╕-рд╕реАрдЖрдИ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдЪреЗрдХрдорд╛рд░реНрдХ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕рдм рд╣реИред рдЕрдм рдХрдорд┐рдЯ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЯреНрд░реИрд╡рд┐рд╕ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╣реЛрдВрдЧреЗ:



рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рди рднреВрд▓реЗрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╕рд░реНрдХрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ, рдЕрд░реНрдерд╛рддред рд╕рд╛рдЭрд╛ рдЪреЗрдХрдмреЙрдХреНрд╕ рдЙрдирдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ:


рд╡реИрд╕реЗ, рдЯреНрд░реИрд╡рд┐рд╕ OS X 10.8.5 рдкрд░ Xcode 5.0.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ iOS 5.0 рдФрд░ iOS 5.1 рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИред

рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкрд░реАрдХреНрд╖рдгред


рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА iOS 5 рдкрд░ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рддреЛ рдЖрдк рдХрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдХрд░ рдЙрд╕ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рддрд╛рд░реНрдХрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╡рд▓ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдХреЗрд╡рд▓ рдЖрд╡реЗрджрди рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд╛рд▓реА рдХрдВрдЯреЗрдирд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП xcodebuild рдХрдорд╛рдВрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
 xcodebuild test -project XCode/TravisCI.xcodeproj -scheme iOSDeviceLogicTests -sdk iphoneos -destination name='iPad Yan' -configuration Release 

рдпрджрд┐ рдХреБрдЫ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕реНрдкреЙрдЗрд▓рд░ рджреЗрдЦреЗрдВ
  • рдкреНрд░реЛрд╡рд┐рдЬрдирд┐рдВрдЧ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди Xcode рд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╢реБрд░реВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
  • рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рдмрд┐рд▓реНрдб рдЪрд░рдгреЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред
  • рдмрд┐рд▓реНрдб рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдмрдВрдбрд▓ рд▓реЛрдбрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
     $(BUILT_PRODUCTS_DIR)/MyExistingApp.app/MyExistingApp 
  • рдФрд░ рдЯреЗрд╕реНрдЯ рд╣реЛрд╕реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рд╣реИ:
     $(BUNDLE_LOADER) 
  • рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдВрдЯреЗрдирд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЕрд╕реЗрдВрдмрд▓реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЫрд┐рдкреЗ рд╣реБрдП рдкреНрд░рддреАрдХ рди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╡рд╣ рд╕рдм рд╣реИред рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ!

рд╕рдВрджрд░реНрдн


Source: https://habr.com/ru/post/In212615/


All Articles