iOS рдХрдВрд╕реЛрд▓ рдРрдк - рдПрдХ GUI рдХреЗ рдмрд┐рдирд╛ iOS рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИ

рд╣рд╛рдмрд░рд╛ рдХреЗ рд╕рднреА рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВ рдХреЛ рд╢реБрдн рджрд┐рди!

рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ, рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ iOS рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЬреЗрд▓рдмреНрд░реЗрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдХреБрдЫ рднреА рдирд╣реАрдВ: iOS AppStore (рдЙрд░реНрдл iTunesStore) рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред



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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдерд╛рдкрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрд░ рдЙрдирдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реАред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдЕрднреА рднреА рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдЪреЛрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред

рддреЛ, рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ - Xcode рдореЗрдВ рд╕реАрдзреЗ рдПрдХ рдХрдВрд╕реЛрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдгред



рд╣рдо Xcode рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ: "рдЦрд╛рд▓реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди" рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдирд╛рдо рдХреЗ рд╕рд╛рде рдЖрдП (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ - рд╣реИрдХрд┐рдВрдЧ)ред рдареАрдХ рд╣реИ, рд╣рдореЗрдВ рдПрдХ рд░рд┐рдХреНрдд рдЬреАрдпреВрдЖрдИ рдЖрд╡реЗрджрди рдорд┐рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рд╣рдордиреЗ? рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ!


рдФрд░ рдХреНрдпрд╛? рд╣рдореЗрдВ GUI рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдирд╛рд╡рд╢реНрдпрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рднреА рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред


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


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ Info.plist рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рд╕рд╛рд╣рд╕рдкреВрд░реНрд╡рдХ рдЗрд╕рдХреЗ рдЙрд▓реНрд▓реЗрдЦ рдХреЛ рдзреНрд╡рд╕реНрдд рдХрд░рддреЗ рд╣реИрдВред


рд╣рдореЗрдВ рдпрд╛ рддреЛ рдПрдХ рдмрдВрдбрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рдЗрд╕рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдореА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдирдХрд▓реА рдмрдВрдбрд▓ рдореЗрдВ рд░рд╣рдиреЗ рджреЗрдВред "рдХрдВрд╕реЛрд▓ред"


рдЦреИрд░, рдЕрдм рд╣рдо рдХреЛрдб рдХреЛ main.m рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдмрджрд▓ рджреЗрдВрдЧреЗ: UIKit рдФрд░ AppDelegate рдХрд╛ рдЖрдпрд╛рдд рд╣рдЯрд╛ рджреЗрдВред .pch рднреА, рд╣рдо рдХреЗрд╡рд▓ Foundation.h рдЫреЛрдбрд╝рдХрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред рд╣рдо main() UIApplication рд╕реЗ UIApplication рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдмрд╕ рд░рд┐рдЯрд░реНрди 0 рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдЦреИрд░, рдЕрдм рд╣рдо рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рд╣рд╛рдВ, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рдЕрдм рд╣рдорд╛рд░реЗ рдЕрджреНрднреБрдд рдмреЗрдХрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХреИрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдЖрдЦрд┐рд░рдХрд╛рд░, рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рдХреЛрдИ рдЯрд░реНрдорд┐рдирд▓ рдирд╣реАрдВ рд╣реИ? рд╣рд╛рдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рдпрд╣ рдПрдХ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рд╣реИ, рдПрдХ рдПрдореБрд▓реЗрдЯрд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд┐рд░реНрдл рдПрдХ рд╕рд╛рдорд╛рдиреНрдп makoshi рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИред рд▓реЗрдХрд┐рди рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рднреА рдЗрд╕реЗ рдЪрд▓рд╛рдирд╛ рдХреЛрдИ рдЖрд╕рд╛рди рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ!

рд╣рдо рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдпрд╛рдж рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЛ рдбрд╛рдЗрд▓реНрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рдЦреЛрдЬрд╛ рдФрд░ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рдЭрдВрдбреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг рдорди рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ ред рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░ DYLD_ROOT_PATH рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, DYLD_ROOT_PATH , рдЬрд┐рд╕ рдкрде рдХреЛ DYLD_ROOT_PATH рдлрд╛рдЗрд▓ рдореЗрдВ рдЪреМрдЦрдЯреЗ рдФрд░ libs рдХреЗ рд▓рд┐рдП рд╕рднреА рдкрде "рд╕рдВрд▓рдЧреНрди" рдХрд░рддрд╛ рд╣реИред

рдЦреИрд░, рд╣рдо рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП "рд╢реЛ рдЗрди рдлрд╛рдЗрдВрдбрд░" рдЪреБрдиреЗрдВред


рддреЛ рдЖрдк рдмрд╕ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП cd рд╕рд╛рде hackup.console рдХреЛ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЦреАрдВрдЪ рдФрд░ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

 $ pwd /Users/silvansky/Library/Developer/Xcode/DerivedData/hackup-cbpgmjwwgsfnqlgjnrlcnbjcxnmu/Build/Products/Debug-iphonesimulator/hackup.console $ ./hackupdyld: Symbol not found: _OBJC_CLASS_$_NSString Referenced from: /Users/silvansky/Library/Developer/Xcode/DerivedData/hackup-cbpgmjwwgsfnqlgjnrlcnbjcxnmu/Build/Products/Debug-iphonesimulator/hackup.console/./hackup Expected in: /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation in /Users/silvansky/Library/Developer/Xcode/DerivedData/hackup-cbpgmjwwgsfnqlgjnrlcnbjcxnmu/Build/Products/Debug-iphonesimulator/hackup.console/./hackup [1] 61835 trace trap ./hackup $ otool -L hackup hackup: /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 992.0.0) /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0) /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.0.0) /usr/lib/libSystem.dylib (compatibility version 1.0.0, current version 125.0.0) 

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдм рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдорд╛рдирдХ рдкреНрд░рдгрд╛рд▓реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ Foundation рдврд╛рдВрдЪреЗ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдЙрд╕ рд░реВрдкрд░реЗрдЦрд╛ рдореЗрдВ рднрд┐рдиреНрди рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╣рдо рдЗрд▓рд╛рдЬ рдХрд░рддреЗ рд╣реИрдВ: рд╣рдо рдЕрдкрдиреЗ iOS рдПрд╕рдбреАрдХреЗ рдХреЛ Xcode.app рдмрдВрдбрд▓ рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВ, рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 $ DYLD_ROOT_PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk" ./hackup 

рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИрдВ! рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рд╣реБрдЖ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░реЛ!

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП NSLog рдЬрдЧрд╣, stdout рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВред рдореИрдВрдиреЗ рдЕрдкрдирд╛ NSPrintf рдирд╛рдо рджрд┐рдпрд╛, рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдХреЛрдб рд╣реИ:

 void NSPrintf(NSString *format, ...) { va_list args; va_start(args, format); NSString *message = [[[NSString alloc] initWithFormat:format arguments:args] autorelease]; va_end(args); std::cout << [message cStringUsingEncoding:NSUTF8StringEncoding]; } 

рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдЧрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдЙрдЯрдкреБрдЯ std::cout рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо main.m рдХреЛ main.mm рдирд╛рдо main.mm рдФрд░ iostream рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдирд╣реАрдВ рднреВрд▓рддреЗ рд╣реИрдВред

рдареАрдХ рд╣реИ, рдЕрдм рд╣рдо рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдХреНрдпрд╛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВрдЧреЗ?

рдпрд╣рд╛рдВ рдорд╕реНрддреА рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдирд┐рдЬреА рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╣рд╛рдБ рд╕реЗ рд▓рд╛рдПрдБ? рд▓реЗрдХрд┐рди рдкреНрд░рд▓реЗрдЦрди рдХреА рдХрдореА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдУрд╣, рдпреЗ рдореБрд╢реНрдХрд┐рд▓ рд╕рд╡рд╛рд▓ рд╣реИрдВред рдирд┐рдЬреА рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреНрд░рд▓реЗрдЦрди рдирд╣реАрдВ рд╣реИ, рдмрд┐рд▓реНрдХреБрд▓ред рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЙрдЪрд┐рдд рд╡рд┐рд╡рд░рдг - рднреАред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдПрдХ рдЕрджреНрднреБрдд рдмрд╛рдд рд╣реИ - рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ! рдЗрд╕рдХреЗ рд╕рд╛рде, рд▓рд╛рдкрддрд╛ рд╣реЗрдбрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдереЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕реВрдЪрдирд╛рддреНрдордХ рднрдВрдбрд╛рд░ рд╣реИ: iOS-Runtime-Headers (рдФрд░ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдпреЗ рд╣реЗрдбрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдереЗ: RuntimeBrowser , рджрдпрд╛рд▓реБ рд╡реНрдпрдХреНрддрд┐ рдирд┐рдХреЛрд▓рд╕ рд╕реЗрд░рд┐рдпреЛрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж)ред рд╣рдо рдХреБрдЫ рд╣реЗрдбрд░ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдЦреЛрдЬрддреЗ рд╣реИрдВред рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рд╡рд┐рдзрд┐ рднрд░ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ - (id)applications ISSoftwareMap рд╡рд░реНрдЧ рдХреЗ - (id)applications , рдирд┐рдЬреА iTunesStore рдврд╛рдВрдЪреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ред рдареАрдХ рд╣реИ, рдЖрдЗрдП рд╣рдо рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рдпрд╣ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЙрд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ!


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрд╕ рдПрдХ рдирд┐рдЬреА рдврд╛рдВрдЪрд╛ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рди рд╣реА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рдордХреНрдЦреА рдкрд░ рд▓реЛрдб рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ NSBundle рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╣рдо рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдПрдХ рдирд┐рдЬреА рдврд╛рдВрдЪреЗ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛:

 BOOL loadPrivateFramework(NSString *framework) { NSString *path = [NSString stringWithFormat:@"/System/Library/PrivateFrameworks/%@.framework", framework]; NSBundle *b = [NSBundle bundleWithPath:path]; BOOL success = [[[b retain] autorelease] load]; if (!success) { NSPrintf(@"Failed to load private framework %@!\n", framework); } return success; } 

рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди YES рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╣рдо рд▓реЛрдб рдХрд┐рдП рдЧрдП рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдмрд▓реНрдХрд┐, рдЗрд╕рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрдХреНрд╖рд╛рдПрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдЕрдм рд╣рдореЗрдВ ISSoftwareMap рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 Class ISSoftwareMap = NSClassFromString(@"ISSoftwareMap"); 

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рд╣реЗрдбрд░ рд╕реЗ рд╕рдордЭ рдЪреБрдХреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП + (id)currentMap рдпрд╛ + (id)loadedMap рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 id isSoftwareMap = [ISSoftwareMap performSelector:@selector(currentMap)]; if (!isSoftwareMap) { isSoftwareMap = [ISSoftwareMap performSelector:@selector(loadedMap)]; } 

рдЦреИрд░, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдирд┐рдЬреА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ! рдмрдзрд╛рдИ! =)

рдЕрдм рдЕрдВрдд рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

 id *applications = [isSoftwareMap performSelector:@selector(applications)]; NSPrintf(@"applications:\n%@\n", applications); 

рддреЛ, рдЕрдм рд╣рдо рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ! рдХреБрдЫ? рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЦреИрд░, рд╣рд╛рдБ, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдЦрд┐рд░рдХрд╛рд░, рд▓реЛрдбрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдирд┐рд░рдкреЗрдХреНрд╖ рд╣реИрдВред рддреЛ рдЪрд▓реЛ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдмреЗрд╣рддрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг iPad рд╣реИред

рдХреНрдпрд╛? рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рдЧреИрд░-рд╕рджрд╕реНрдпрддрд╛ рдкрд░ рд╢рдкрде? рдЦреИрд░, рд╣рд╛рдВ, рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рднреВрд▓ рдЧрдпрд╛: рдЖрдИрдУрдПрд╕ рдПрд╕рдбреАрдХреЗ рдЖрдкрдХреЛ рдмрд┐рдирд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдмрд╛рдпрдиреЗрд░реА рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдордиреЗ рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛! рд╣рдо рдПрд╕рдбреАрдХреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗред рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ SDKSettings.plist in SDKSettings.plist рдФрд░ рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдХреНрдпрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛? рдлрд╛рдЗрд▓ рдорд╛рд▓рд┐рдХ рдирд╣реАрдВ? рдареАрдХ рд╣реИ, рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐рдпрд╛рдВ рдФрд░ рд╡рд╣ рд╕рдм ... рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реВрдбреЛ рд╣реИ:

 $ sudo plutil -convert xml1 SDKSettings.plist $ sudo nano SDKSettings.plist $ sudo plutil -convert binary1 SDKSettings.plist 

рдиреИрдиреЛ рдХреЗ рдмрдЬрд╛рдп, рдмреЗрд╢рдХ, рдЖрдк vim / mcedit / emacs рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрджрд╛рддреНрдд рдкрд╛рда 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдкрд╛рджрдХ рдореЗрдВ, рдЖрдкрдХреЛ XML-ke рдореЗрдВ CODE_SIGNING_REQUIRED рдЯреИрдЧ CODE_SIGNING_REQUIRED рдФрд░ рдХреЛрдИ рдорд╛рди рдирд╣реАрдВ рджреЗрдирд╛ рд╣реЛрдЧрд╛ред


рдЕрдм Xcode рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ рдФрд░ рдЖрдирдиреНрджрд┐рдд рд╣реЛрдВ - рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ! рдЕрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрди рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛! рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо OpenSSH (Cydia рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

 $ pwd /Users/silvansky/Library/Developer/Xcode/DerivedData/hackup-cbpgmjwwgsfnqlgjnrlcnbjcxnmu/Build/Products/Debug-iphoneos/hackup.console $ scp hackup root@192.168.2.2:/private/var/mobile/Documents/ root@192.168.2.2's password: hackup 100% 26KB 26.3KB/s 00:00 $ ssh mobile@192.168.2.2 mobile@192.168.2.2's password: iSilvansky:~ mobile$ ~/Documents/hackup ( "<ISSoftwareApplication: 0x18b4e0>: (ru.mail.agent, 335315530:11499676)", "<ISSoftwareApplication: 0x18d010>: (com.getdropbox.Dropbox, 327630330:11201748)", # ... some more ... "<ISSoftwareApplication: 0x1936f0>: (8HLDK844H7.net.litchie.idos, 377135644:2716751)" ) 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ - (id)applications рд╡рд┐рдзрд┐ рдПрдХ NSArray рдЬрд┐рд╕рдореЗрдВ ISSoftwareApplication рдкреНрд░рдХрд╛рд░ рдХреА ISSoftwareApplication ред рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЙрд╕реА рдврд╛рдВрдЪреЗ рдХреЗ рдирд┐рдЬреА рдкреНрд░рдореБрдЦреЛрдВ рдореЗрдВ рднреА рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЦреИрд░, рд╣рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓ рдЧрдИ рд╣реИ, рдЖрдЗрдП рд╣рдо рдЙрдиреНрд╣реЗрдВ рдФрд░ рдХрд░реАрдм рд╕реЗ рджреЗрдЦреЗрдВ:

 NSArray *applications = [isSoftwareMap performSelector:@selector(applications)]; if (applications) { for (id app in applications) { NSPrintf(@" *** Info for application %@\n", app); LOG_SELECTOR(app, bundleIdentifier) LOG_SELECTOR(app, bundleShortVersionString) LOG_SELECTOR(app, bundleVersion) LOG_SELECTOR(app, accountDSID) LOG_SELECTOR(app, accountIdentifier) LOG_SELECTOR(app, softwareType) LOG_SELECTOR(app, versionIdentifier) LOG_SELECTOR(app, itemIdentifier) LOG_SELECTOR(app, containerPath) LOG_SELECTOR(app, storeFrontIdentifier) LOG_SELECTOR(app, description) } } 

LOG_SELECTOR рдореИрдХреНрд░реЛ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 #define LOG_SELECTOR(obj, sel)\ if ([obj respondsToSelector:@selector(sel)])\ {\ NSPrintf(@" "#sel": %@\n", [obj performSelector:@selector(sel)]);\ } 

рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдг!

 iSilvansky:~ mobile$ ~/Documents/hackup *** Info for application <ISSoftwareApplication: 0x16d5d0>: (ru.mail.agent, 335315530:11499676) bundleIdentifier: ru.mail.agent bundleShortVersionString: 4.0 bundleVersion: 3815 accountDSID: 407343733 accountIdentifier: habrahabr.ru/users/silvansky/ softwareType: (null) versionIdentifier: 11499676 itemIdentifier: 335315530 containerPath: /private/var/mobile/Applications/374BF6DB-8773-4063-9D84-F5858DE7AEBE storeFrontIdentifier: 143441 description: <ISSoftwareApplication: 0x16d5d0>: (ru.mail.agent, 335315530:11499676) *** Info for application <ISSoftwareApplication: 0x16f100>: (com.getdropbox.Dropbox, 327630330:11201748) bundleIdentifier: com.getdropbox.Dropbox # ... many more ... 

рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдмрдВрдбрд▓ рдЖрдИрдбреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ (рдпрд╛ рдмреЗрд╣рддрд░ рд╣реЛрдиреЗ рддрдХ рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░ рджреЗрддреЗ рд╣реИрдВ)ред

рдЕрдм рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХреБрдЫ рд╕рд░рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ:

 iSilvansky:~ mobile$ ~/Documents/hackup ru.mail.agent com.getdropbox.Dropbox # ... more and more ... 8HLDK844H7.net.litchie.idos iSilvansky:~ mobile$ exit logout Connection to 192.168.2.2 closed. 

рдЕрдм рд╣рдо рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЛ рджреЛрд╖ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕рд╛рдмреБрди рдореЗрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ... рд╣рд╛рдБ, рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдмрд╛рдд: рд╣рдо рдЕрдм рдирд┐рдЬреА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рдЕрдм рдЖрдк рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ Cydia рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рджрд░рдЕрд╕рд▓, Xcode рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЧрд┐рддреБрдм рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ (рдмреЗрд╢рдХ, рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде):

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


All Articles