рдкрд░рд┐рдЪрдп
рдореИрдВ рдПрдХ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ iOS рдХреНрд▓рд╛рдЗрдВрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ BaaS
Parse.com рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреИрдХреЗрдВрдб рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
ред рдиреАрдЪреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдорд┐рд▓рд╛, рдХреБрдЫ рдЯрд┐рдкреНрд╕ рдФрд░ рдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рд╡рд┐рдЪрд╛рд░ parse.com рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдЧреНрд░рд╛рд╣рдХ рдиреЗ RoR рдкрд░ рдПрдХ рд╕рд░реНрд╡рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреИрд╕реЗ рдХрд╛ рдирд┐рд╡реЗрд╢ рдХрд░рдиреЗ рдХреА рд╣рд┐рдореНрдордд рдирд╣реАрдВ рдХреАред рд╣рдордиреЗ рдПрдХ рд╕рдЦреНрдд NDA рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП, рдЗрд╕рд▓рд┐рдП рдореИрдВ Appstore рдХреЛ рд▓рд┐рдВрдХ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ред рд╕рднреА рдЖрдИрдЯреА рдкреБрд╕реНрддрдХреЛрдВ рдХреА рдЕрдЪреНрдЫреА рдкрд░рдВрдкрд░рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореИрдВ рдЧреНрд░рд╛рд╣рдХ рдПрдХреНрд╕ рдФрд░ рдХрдВрдкрдиреА рд╡рд╛рдИ рдХреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рд╕рднреА рдЕрдиреБрднрд╡ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди-рдРрдк рдЦрд░реАрджрд╛рд░реА рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рднрд╛рдЧ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдПред
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рдХрдИ рдмрд╛рд░ рдореИрдВрдиреЗ рдРрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦрд╛ рдФрд░ рд╕реБрдирд╛ рд╣реИ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмреАрдЪ рдлреИрд▓реЗ рд╣реБрдП рдереЗ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХреА рдЕрдЦрдВрдбрддрд╛ рдЦреЛ рдЧрдП, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдЙрди рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдореИрдВрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдореБрдЭреЗ рдорд┐рд▓реЗ рд╕рднреА рдЕрдиреБрднрд╡ рдХреЛ рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ред
Xcode рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рддрд╛рд░реНрдХрд┐рдХ рдкрд░рддреЗрдВ
рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ
рдЖрд╡реЗрджрди рдореЗрдВ, рд╣рдо рджреЛ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:
рдкрдмрдирдм рдФрд░
рдкрд╛рд░реНрд╕ ред рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдПрд╕рдбреАрдХреЗ рдХреЗ рд╕рд╛рде рд╕рднреА рдЗрдВрдЯрд░реИрдХреНрд╢рди рдЗрд╕ рдкрд░рдд рдкрд░ рд╣реЛрддрд╛ рд╣реИред
- рд╕рдВрджреЗрд╢ рдХреЗрдВрджреНрд░
- рдкрдмрдирдм рдПрд╕рдбреАрдХреЗ
- рдкрд╛рд░реНрд╕ рд╕реЗрд╡рд╛рдПрдВ
рдкрд╛рд░реНрд╕ рдХрд╛ рдЕрдкрдирд╛ рдЖрдИрдУрдПрд╕ рдПрд╕рдбреАрдХреЗ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдмрд╛рдж рдореЗрдВ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ Parse Restfull API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рд╣рдордиреЗ AFNetworking рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд┐рдпрд╛ред рд╕рднреА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдЬреЛ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ рдХреНрд▓рд╛рдЙрдб рдХреЛрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ - рдпрд╣ рдирд┐рдХрд▓рд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рд░реНрд╡рд░ рдХреЛрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдирдПрд╕рдбреНрд░реЛрдм рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рднрд░рдХрд░ рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд░рдЪрдирд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рдмреИрдХрдмреЛрди.рдЬреЗрдПрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдХреНрд▓рд╛рдЙрдб рдХреЛрдб рдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ - рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИ рдФрд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ред рдХреЗрд╡рд▓ рд▓реЙрдЧрд┐рди рдФрд░ рдЕрдкрдбреЗрдЯ рд╕реНрдХреНрд░реАрди рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗ рдЧрдП рдереЗред
рдпреВрдЖрдИ
рдпрд╣ рдкрд░рдд рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИ - рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ ViewControllers, Views, Cells рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рдпрдВрддреНрд░рдХ рд╣реИрдВ рдЬреЛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдмрд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕реНрдХреНрд░реАрди рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдЪрд╛рд▓реЗрдВ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлреЗрд╕рдмреБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдХреНрд░реАрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреЗ рдлреЗрд╕рдмреБрдХ рдЦрд╛рддреЗ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рднрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣рд╛рдВ рдирд┐рдпрдВрддреНрд░рдХ рд╣реИрдВ рдЬреЛ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЛ рдкреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддреЗ рд╣реИрдВред рд╣рдореЗрдВ UICollectionView рдХреЗ рд▓рд┐рдП рдбреНрд░реИрдЧ-рдПрди-рдбреНрд░реЙрдк рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рдереА - рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдордиреЗ рдПрдХ рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:
github.com/lxcid/LXReorderableCollectionViewFlowLayout ред рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдкреНрд░реИрдВрдХ рдЦреЗрд▓рдирд╛ рдерд╛, рд▓реЗрдХрд┐рди, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк UITableView рдХреЗ рд▓рд┐рдП рддрд╛рдЬрд╝рд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ
MNMPullToRefresh рдХреА рднреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдбреЗрдЯрд╛
CoreData рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдореИрдЬрд┐рдХ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХреЛрдИ рдЕрдиреНрдп рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдХреНрд╖рд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВред
- рдХреЛрд░ рдбреЗрдЯрд╛
- рдореИрдЬрд┐рдХ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ
- DataBaseManager рд╡рд░реНрдЧ
- datasources
UIViewController рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдХрдХреНрд╖рд╛рдПрдВ, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рд╣реИрдВред - рдореЙрдбрд▓
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдореЙрдбрд▓ рд╣реИрдВ - рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЙрдбрд▓ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдордзреНрдпрд╡рд░реНрддреА рдореЙрдбрд▓ рдЬреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрддреЗ рд╣реИрдВред
рддреБрд▓реНрдпрдХрд╛рд▓рди рдкрд░рдд
рддрд╛рд░реНрдХрд┐рдХ рдкрд░рдд рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ)ред рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдмрд╕ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдб рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП, рд░рдирдЯрд╛рдЗрдо рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рднрд░рдиреЗ рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИ:
рд╡реЙрдЪ рдХреЛрдб-(id)syncLocal:(id)local withClass:(Class)localClass fromParse:(id)parse{ NSAssert([parse isKindOfClass:[UserStatistic class]], @"wrong class"); UserStatistic*stat =(UserStatistic*)parse; LocalUserStatistics* newLocalStat = (LocalUserStatistics*)local; if(!newLocalStat) newLocalStat=[super syncLocal:local withClass:localClass fromParse:parse]; unsigned int outCount; Protocol* protocol = objc_getProtocol("StatisticsProtocol"); objc_property_t *propList = protocol_copyPropertyList(protocol, &outCount); NSArray* noSetProps = [self propertiesDontNeedToSet]; for (int i = 0; i < (int)outCount; i++) { objc_property_t * oneProp = propList + i; NSString *propName = [NSString stringWithUTF8String:property_getName(*oneProp)]; if([noSetProps indexOfObject:propName]==NSNotFound){ id newValue =[stat valueForKey:propName]; if(newValue && newValue!=[NSNull null]){ [newLocalStat setValue:newValue forKey:propName]; } } } free(propList); return newLocalStat; }
- ParseObjectsSync
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рдд - рд╕рдВрдмрдВрдзрд┐рдд рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП ParseObjectSync рдкрд░рдд рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдЧ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ - ParseObjectSync
рд╡рд╣ рдкрд░рдд рдЬрд┐рд╕ рдкрд░ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд░реНрд╕ рдореЙрдбрд▓ рдХреЛ рдХреЛрд░ рджрд┐рдирд╛рдВрдХ рдореЙрдбрд▓ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд╣рдо рдЦреЗрддреЛрдВ рдХреЛ рднреА рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВред - рдЪреИрдЯ рдЗрдВрдЬрди
рдпреВрдЖрдИ рдХреЗрд╡рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдПрдХ рдкрд░рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЪреИрдЯ рдЗрдВрдЬрди рд╡рд░реНрдЧ рднреА CoreDate рдХреЗ рд╕рд╛рде UI рдФрд░ Pubnub рдХреЗ рдмреАрдЪ рд╕реНрдерд┐рдд рд╣реИред рдпрд╣ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рдирд╣реАрдВ рдХрд┐ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рдЬрд┐рд╕реЗ рдХрдмреНрдЬреЗ рд╡рд╛рд▓реА рдкрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдореБрдЭреЗ рдмрд╕ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рдереАред
рдРрдк рдЦрд░реАрдж рдореЗрдВ
рдЖрд╡реЗрджрди рдореЗрдВ, рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА, рдЖрдВрддрд░рд┐рдХ рдореБрджреНрд░рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдЧрдпрд╛ рдерд╛ - рд╕рд┐рдХреНрдХреЗ (рд╕рд┐рдХреНрдХреЗ), рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрди-рдРрдк рдЦрд░реАрдж рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЦрд░реАрдж рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди :) рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИред Apple рдХреЗ рдЗрди-рдРрдк рдЦрд░реАрджрд╛рд░реА рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╡реЗ рдПрдХ рдЙрдкрднреЛрдЧреНрдп рдЙрддреНрдкрд╛рдж рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рд╕рд┐рдХреНрдХреЛрдВ рдХреА рдЖрдп / рдЦрдкрдд рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдФрд░ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреИрд╕реЗ рдЦреЛ рджреЗрдЧрд╛ рдФрд░ рдкрд░реЗрд╢рд╛рди рд╣реЛрдЧрд╛ред
рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕ рдкрддрд▓реА рдкрд░рдд рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рд╣рдордиреЗ рдЦреБрдж рдХреЛ рдкрд╛рд░реНрд╕реЗ.рдХреЙрдо рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдФрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдирд╣реАрдВред рдЗрд╕рдиреЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рд▓реЗрди-рджреЗрди рдкреВрд░реНрдгрддрд╛ рдХреЛрдб рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдореЗрдВ рдЙрд╕ рдкрд▓ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╕рд┐рдХреНрдХреЗ рдХреЛ parse.com рдкрд░ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдлрд┐рдирд┐рд╢рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЬрдЧрд╣ рд╣реИ, рдЬреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп рд▓реЗрдирджреЗрди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рд░рдЦрддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдиреЗ рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджрд┐рдпрд╛ рдФрд░ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдЕрдк-рдЯреВ-рдбреЗрдЯ рд╕рд┐рдХреНрдХреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред
рдПрдХ рдФрд░ рдЪреАрдЬ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рд▓реЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ: SKPaymentTransactionObserver (рд╡рд╣ рд╡рд░реНрдЧ рдЬреЛ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ) рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрдкрдирд╛ рд╕рдВрдкреВрд░реНрдг рдЬреАрд╡рди рдЬреАрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЕрдкреВрд░реНрдг рд▓реЗрдирджреЗрди рдЬреЛ рдЕрдВрддрд┐рдо рдмрд╛рд░ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛ рдерд╛, рдЖрд╡реЗрджрди рдХреЗ рд╡рд╣рд╛рдВ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдордиреЗ рдпрд╣рд╛рдВ рдЕрдкрдирд╛ рд╕рд┐рдВрдЧрд▓рдЯрди рдирд╣реАрдВ рдмрдирд╛рдпрд╛ред
рд╡рд░реНрдХ рд╕рд░реНрдХрд▓ рдХрдВрдЯреНрд░реЛрд▓рд░
рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреАрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдордп рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╡рдзрд┐ рдореЗрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдмреАрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЗрди рддрд╕реНрд╡реАрд░реЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдЪреИрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдореЗрдВ рднреА рдХрдИ рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рдереАрдВ: рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлреЗрд╕рдмреБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╣реИ рдФрд░ рд▓реЙрдЧрд┐рди рдХреЗ рдмрд╛рдж рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рдкреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдХреНрд░реАрди рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдПрдХ рддрдереНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓реЙрдЧрд┐рди рдЯреЛрдХрди рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рд╣реЛрдЧрд╛ред рдЖрдкрдХреЛ рд▓реЙрдЧрдЖрдЙрдЯ рдХреЗ рдмрд╛рдж рдкреБрд╢ рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рдЕрдирд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЙрдиреНрдЪ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдХреБрдЫ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ, рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЛ рднреА рд▓реЙрдЧрд┐рди рдХреЗ рдмрд╛рдж рд╕реЗрд╡рд╛ рд▓реЙрдиреНрдЪ рдЕрдиреБрдХреНрд░рдо рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬреАрд╡рди рдХреЗ рд╕рднреА рддрд░реНрдХ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЬреАрд╡рди рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ред рд╡рд░реНрдЧ, рд╡реИрд╕реЗ, рдПрдХ рдПрдХрд▓ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдРрдкрдбреЗрд▓рдЧреЗрдЯ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рдирддреАрдЬрддрди, AppDelegate рдореЗрдВ рдХреЛрдб рдХреА рдХреЗрд╡рд▓ 146 рд▓рд╛рдЗрдиреЗрдВ рд╣реА рд░рд╣ рдЧрдИрдВред
Parse.com рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рдкрд╛рд░рд╕реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрд╕рдВрдж рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд┐рддрдирд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд▓рд╣рд╛рд▓, рд╕реЗрд╡рд╛ рдПрдХ рдЦрд╛рддреЗ (рдкреНрд░реЛ рдкреНрд▓рд╛рди) рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реАрдорд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ:
рдлрдЯрдиреЗ рдХреА рд╕реАрдорд╛ : рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 40 рдЕрдиреБрд░реЛрдз
рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рд╕реАрдорд╛ : 160 - рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ (рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп рдпрд╣ рдирд╣реАрдВ рд╣реИ)
рдХреНрд▓рд╛рдЙрдб рдХреЛрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рд╕реАрдорд╛: 15 рд╕реЗрдХрдВрдб
рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЬреЙрдм рдХреА рд╕реАрдорд╛: 15 рдорд┐рдирдЯ
рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗ рдЕрднреА рддрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╣ рд╣реИрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╣рд▓реЗ рд╣реА рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд╕реАрдорд╛ рддрдХ рдкрд╣реБрдВрдЪ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдкрд╛рд░реНрд╕ рдЯреАрдо рд╕реЗ рдирд┐рдореНрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдкреНрд▓рд╛рди рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛:
рдХреБрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: 1000
рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: 500
рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рдЙрд╕реА рд╕рдордп рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ: 1000
рдПрдкреАрдЖрдИ рдХреЙрд▓ рдлрдЯрдиреЗ рдХреА рд╕реАрдорд╛: 1000
рдХреНрд▓рд╛рдЙрдб рдХреЛрдб рдлрдЯ рд╕реАрдорд╛: 2000
рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдХрд┐ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 1,000 рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдкреНрд░рддрд┐ рдорд╛рд╣ $ 14,000 рдЦрд░реНрдЪ рд╣реЛрдВрдЧреЗред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдЙрдирд╕реЗ рдкреВрдЫрд╛ рдХрд┐ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреИрд╕реЗ рдХрдо рдХрд░реЗрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 1000 рдЕрдиреБрд░реЛрдз рдЙрдЪрд┐рдд рд╣реИрдВ, рдФрд░ рдХрдо рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред
рдкрд╛рд░реНрд╕ рдореЗрдВ, рдЕрднреА рддрдХ рдПрдХ рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЙрдбрд▓ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдЬреБрдЯрд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд▓рдЧрднрдЧ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ,
рдкрд╛рд░реНрд╕реЗ рдХрд┐рдиреЗрд╡реЗ рдХреЛ рдЦреЛ рджреЗрддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд┐рдирд╡реЗ рд╕реЗ рдЗрд╕ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛, рдФрд░ рдпрд╣рд╛рдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐: "рдЖрдк рд╕рд╣реА рд╣реИрдВ - рд╣рдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреБрд▓ рдЕрдиреБрд░реЛрдз рдпрд╛ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдкрд░)ред" $ 1,400 рдПрдХ рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред BaaS, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддрд┐ рдорд╛рд╣ 50,000 рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, 3 рд╡рд╛рддрд╛рд╡рд░рдг, рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ 50 рд▓рд┐рдкрд┐рдпреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реИред рдЙрд╕реА рд╕рдордп, рдПрдХ рд╕рдорд░реНрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛: "рдмреАрдПрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдиреЗрд╡ рд╡реЗрдм рдХрдВрд╕реЛрд▓ рдХреЗ рднреАрддрд░ рдЕрдкрдиреЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдмреАрдПрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЬреЗрдПрд╕ рдХреЛрдб рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдлреА рдПрдХ рдПрдХрд▓ рдмреАрдПрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдлрд┐рдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдПрдХ рдЗрддрдиреА рдЗрдЪреНрдЫрд╛рдПрдБред тАЭрд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдХрд░реНрд╖рдХ рджрд┐рдЦрддрд╛ рд╣реИред
Backbone.js рдкрд░ рдХреНрд▓рд╛рдЙрдб рдХреЛрдб
рдПрдХ рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрд┐рд╕рдиреЗ рдХреЗрд╡рд▓ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХреА рд╣реБрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдФрд░ рдмреИрдХрдПрдВрдб рдХреЛ рдХрднреА рдирд╣реАрдВ рдЫреБрдЖ, рдореБрдЭреЗ рдмреИрдХрдмреЛрди.рдЬреЗрдПрд╕ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рдереАред рдореБрдЦреНрдп рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛:
- рдХреЙрд▓рдмреИрдХ рдирд░рдХред
async.js рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ - рдбрд┐рдмрдЧрд┐рдВрдЧред
рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рддреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рддрдм рдореИрдВрдиреЗ рдХреНрд▓рд╛рдЙрдб 9 рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛, рдФрд░ рдЙрд╕реА рджрд┐рди рдореБрдЭреЗ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓реЗрдЦрдХ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдорд┐рд▓рд╛ рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛: рдкрд╛рд░реНрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдирдП рдХреЛрдб рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдм рдХреБрдЫ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЬрдЧрд░ рд╕рдВрд╕реНрдХрд░рдг Cloud9 рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╕рдмрд▓рд╛рдЗрдо рдкрд░ рд╕рдм рдХреБрдЫ рдмрдирд╛ рд░рд╣рд╛, рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рддреИрдирд╛рддреА рдФрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рд╣реА рдбрд┐рдмрдЧрд┐рдВрдЧ рд╣реБрдИ - рдкрд░реАрдХреНрд╖рдгред
рдиреАрдЪреЗ рджреЗрдЦреЗрдВред рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдЕрдзреНрдпрд╛рдп рдХреЗ рдпреЛрдЧреНрдп рд╣реИред
рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг
рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рддреИрдпрд╛рд░ рдХрд░рдирд╛
рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рд╡реНрдпрдХреНрддрд┐ рдиреЗ рдХрд╣рд╛, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред
рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рд╕рд░реНрд╡рд░ рдХреЛрдб рдкрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реНрдХ рдЬрдорд╛ рд╣реБрдП рдФрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдИ рджрд┐рдПред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛, рдХреНрд▓рд╛рдЙрдб рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ, рд╕рд░реНрд╡рд░ рдкрд░ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рдж рд╣реА рдбрд┐рдмреЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рдЬрдм рддрдХ рдХрд┐ рдХреЛрдб рдирд╣реАрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рддрдм рддрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рдерд╛, рдХреЗрд╡рд▓ рдЕрдЧрд░ рд╡реЗ рд╕реАрдзреЗ рддреИрдирд╛рддреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рдереЗред
рдирддреАрдЬрддрди, рд╣рдордиреЗ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рд╣рдо рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХ рд╕рд░реНрдХрд▓ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдЭрдВрдбреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╣рдо рдЙрд╕ рдХреЛрдб рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рд╡реЙрдЪ рдХреЛрдб #import //UI #if !TEST #import #endif //Net #import <Parse/Parse.h> #import #import #import #if !TEST #import //Data #import #import #import #import //Sync #import #import #else #endif #if !TEST @interface WorkCircleController(){ ProfilePicturesSync* profilePicturesSync; } @property(nonatomic, weak) AppDelegate* appDelegate; @property(nonatomic, strong) LoginViewsManager* loginManager; @property(nonatomic, strong) NSData* deviceToken; @end #endif @implementation WorkCircleController #if !TEST - (id)initWithDelegate:(AppDelegate*)appDelegate { self = [self init]; if (self) { self.appDelegate = appDelegate; profilePicturesSync = [ProfilePicturesSync new]; } return self; } #pragma mark - Push notification - (void)app:(UIApplication*)application didRegisterForRemoteNotificationsWithToken:(NSData*)deviceToken{ self.deviceToken = deviceToken; if(self.state == LifeStateLoginDataAndNetLayersReady || self.state == LifeStateLoggedIn) [self subscribeToPushes:deviceToken]; } - (void)subscribeToPushes:(NSData *)deviceToken { [self subscribeToParsePushes:deviceToken]; [self subscribeToChatPushes:deviceToken]; } - (void)subscribeToParsePushes:(NSData *)deviceToken { ... } - (void)subscribeToChatPushes:(NSData *)deviceToken { ... } - (void)unsubscribeFromPushesInParseWithBlock:(void (^)(NSError *error))block { ... } #endif #pragma mark - Pre Login Logic -(void)setupPreLoginStateWithBlock:(void (^) (NSError* error))block{ [self prepareNetManagersForPreLoggin]; #if !TEST [self performUIUpdatesForPreLogginWithBlock:^(NSError *error) { if(block) block(error); }]; #else finishWithErrorBlock(nil); #endif } -(void)prepareNetManagersForPreLoggin{ [[ParseRESTClient sharedClient] startParseService]; } #if !TEST -(void)performUIUpdatesForPreLogginWithBlock:(void (^) (NSError* error))block { ... } #endif #pragma mark after register Login Logic - (void)afterRegistrationWithBlock:(void (^) (NSError* error))block{ ... } #pragma mark - Login Logic -(void)loginWithBlock:(void (^) (NSError* error))block{ [self prepareDataManagersForLogginWithBlock:^(NSError *error) { [self prepareNetManagersForLogginWithBlock:^(NSError *_error) { #if !TEST [self performUIUpdatesForLogginWithBlock:^(NSError *uIError) { if(block) block(uIError); [self performAfterLoginUpdatesWithBlock:^(NSError *afterLoginError) { }]; }]; #else if(finishWithErrorBlock) finishWithErrorBlock(error); #endif }]; }]; } -(void)prepareDataManagersForLogginWithBlock:(void (^) (NSError* error))block{ #if !TEST [DataBaseManager setupDataBaseWithUserId:[PFUser currentUser].email]; [[Settings defaultSettings] setUsername:[PFUser currentUser].email]; #endif block(nil); } -(void)prepareNetManagersForLogginWithBlock:(void (^) (NSError* error))block{ [[ParseRESTClient sharedClient] updateToken]; #if !TEST ... #endif block(nil); } #if !TEST - (void)performUIUpdatesForLogginWithBlock:(void (^) (NSError* error))block{ ... } - (void)performAfterLoginUpdatesWithBlock:(void (^) (NSError* error))block { ... } #endif #pragma mark - Logout Logic -(void)logoutWithBlock:(void (^)(NSError *error))block{ #if !TEST ... #else [PFUser logOut]; [[ParseRESTClient sharedClient] closeClient]; block(nil); #endif } - (void)deleteAccountWithBlock:(void (^)(NSError *error))block{ [[ParseRESTClient sharedClient] closeClient]; #if !TEST ... #else [PFUser logOut]; block(nil); #endif }
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдИрдВ рдЬрд┐рдирдореЗрдВ рд╣рдордиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд░рдЦрд╛, рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ, рдПрдХ рдПрдХрд▓ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИ:
- (void) setUpWithBlock:(void (^) (NSError* error))block{ [NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:@"api.parse.com"];
рдЕрдЧрд▓рд╛, рд╣рдордиреЗ рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдФрд░ рддрд░реНрдХ рдмрдирд╛рдпрд╛ред рдЪреВрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдХреЙрд▓рдмреИрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП
SRTAdditions.h рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рд╡рд┐рдЪрд╛рд░ рд╡рд┐рдХрд╛рд╕
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЛ рдХрдо рдХрд░рдирд╛ рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рд░реНрд╕ рдкрд░ рдЬреИрд╕реНрдореАрди рдпрд╛ рдореЛрдЪрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдХреЛ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдкреВрд░реЗ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдпрд╣ рд╕рд╛рдмрд┐рдд рд╣реБрдЖ: рдмрд┐рд▓реНрдб рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рд╣реЛ рдЧрдП, рдХреНрд▓рд╛рдЙрдб рдХреЛрдб рдкрд░ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдХрдо рд╣реЛ рдЧрдпрд╛, рдФрд░ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЯреЗрдирд┐рд╕ рдЦреЗрд▓рдирд╛ рдерд╛ рдЬрдмрдХрд┐ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдЬрдм рдореИрдВрдиреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЯреЗрдирд┐рд╕ рдЦреЗрд▓рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдЕрдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ
рдХреЛ рдЪрд┐рдВрддрд╛ рд╣реБрдИ рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ
рд╣рдбрд╕рди-ci.org рд╕рд░реНрд╡рд░ рдХреЛ рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐
рдЧрд┐рдЯ рд╕реЗ рдирд╡реАрдирддрдо рдХреЛрдб рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдФрд░ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рд▓реЙрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
xtool рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛
рдЧрдпрд╛ рдерд╛ ред рд╡реИрд╕реЗ, рдХрдВрд╕реЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рдиреЗ рдкрд░, рдкрд░реАрдХреНрд╖рдг рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рдЖрдк рдкрд░реАрдХреНрд╖рдг рдЪрд▓ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдХреЛрдб рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрдерд╛рдиреАрдпрдХрд░рдг
рдирддреАрдЬрддрди, рдореИрдВрдиреЗ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓
рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛:
agi18nрдпреБрдХреНрддрд┐рдпрд╛рдБ рдФрд░ рдЪрд╛рд▓реЗрдВ
- рдорд╕реМрджрд╛ рдЖрд▓реЗрдЦ 1 , рд▓реЗрдЦ 2 рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдХреНрдпреЛрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ
- рд╕реНрдирд┐рдкреЗрдЯреНрд╕ ( рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ ):
__weak typeof(self) weakSelf = self;
(void (^)(NSError *error))<#block#>
- рдиреНрдпреВрдпреЙрд░реНрдХ рдЯрд╛рдЗрдореНрд╕ рд╕реЗ рдХреЛрдб рд╢реИрд▓реА
- рдкреНрд░рдХрдЯ рдХрд░рдирд╛ ред UI рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдЙрдкрдХрд░рдгред рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рджреГрд╢реНрдп рдХрд╣рд╛рдВ рдЫреЛрдбрд╝рд╛ рд╣реИ рдпрд╛ рдЬрдм рд╡реЗ рдПрдХ рдирдИ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдирд╣реАрдВ рд╣реИ рдХрд┐ рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдХреМрди рд╕рд╛ рджреГрд╢реНрдп рд╣реИред
- рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдЕрдирдЧрд┐рдирдд рдкреНрд░рддреАрдХ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг
www.gieson.com/Library/projects/utilities/icon_slayer