рдЖрдИрдУрдПрд╕ рдПрд╕рдбреАрдХреЗ рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░реЗрдВ рдФрд░ рдЕрдирд┐рд░реНрдзрд╛рд░рд┐рдд рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

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

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

рддреНрдпрд╛рдЧ



рдПрд╕рдбреАрдХреЗ рдореЗрдВ рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ рдЧрд╛рдЗрдб


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреИрдХрд▓рд╛рдЗрдЯ рд╕реНрддрд░ рдХреЛ рдмрджрд▓реЗрдВ (рдЖрдИрдУрдПрд╕ 5 рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдПрд╕рдбреАрдХреЗ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдирд╣реАрдВ рдерд╛)ред рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдРрдкреНрдкрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЖрдорддреМрд░ рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЪрд░ рдХреЛ рд╕рд╛рд░реНрдердХ рдФрд░ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдПрд╕рдбреАрдХреЗ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╖рдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрдордХ, рд╕реНрддрд░, рд╕реНрдХреНрд░реАрдиред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рджреЗрдЦреЛ LookSDKForSymbol.sh (рдпрд╣ nm рдкрд░ рдореЗрд░рд╛ рдЖрд╡рд░рдг рд╣реИ; рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЕрдиреНрдп рдЙрдкрдХрд░рдг рдмрд╛рдж рдореЗрдВ рдЯреВрд▓ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ) рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╛рдП рдЧрдП рд╡рд░реНрдгреЛрдВ (рдЬреИрд╕реЗ рдХрд┐ рдХрдХреНрд╖рд╛рдУрдВ, рдХрд╛рд░реНрдпреЛрдВ, рдЪрд░) рдХреЗ рдирд╛рдо рд▓реМрдЯрд╛рддреА рд╣реИред рдореБрджреНрджрд╛ рдЙрджрд╛рд╣рд░рдг:
$ LookSDKForSymbol.sh рдкреНрд░рдХрд╛рд╢ рд╕реНрддрд░
U _UIBacklightLevelChangedNotification
рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ ред/System/Library/CoreServices/SpringBoard.app/SpringBoard

режрежрез рдмреА рекрей рд╕реА рек рдЯреА - [рдЕрдкрд░рд┐рдкрдХреНрд╡ рдмреИрдХрд▓рд╛рдЗрдЯ рд▓рд╛рдИрд╡реЗрд▓]
режрежрез рдмреА рекрейремреж рдЯреА - [рдЕрдкрд╛рдЗрд▓реЗрд╢рди рд╕реЗрдЯрдмреЗрдХрд▓рд╛рдЗрдЯ рд▓рд╛рдЗрд╡реЗрд▓:]
0025ce54 t - [UIDevice _backlightLevel]
0025ce40 t - [UIDevice _setBacklightLevel:]
... рдФрд░ рдХреБрдЫ рджрд░реНрдЬрди рд╕реЗ рдЕрдзрд┐рдХ рдЪрд░рд┐рддреНрд░

рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рддреБрд░рдВрдд рддреНрдпрд╛рдЧ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП -[UIApplication backlightLevel] рдмреИрдХрд▓рд╛рдЗрдЯ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

рдЙрдкрдпреЛрдЧрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдЪрд░рд┐рддреНрд░ рдХреЗ рддрд╛рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИрдВ:
  1. рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдФрд░ рд╕реА ++ рдлрд╝рдВрдХреНрд╢рди, рдХрдХреНрд╖рд╛рдПрдВ, рд╕рдВрд░рдЪрдирд╛рдПрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рд╕реЗ рдЬреБрдбрд╝реА рд╣рд░ рдЪреАрдЬ рдореЗрдВ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ ([]) рдпрд╛ рдбреЙрд▓рд░ рдЪрд┐рдиреНрд╣ ($) рд╣реЛрддреЗ рд╣реИрдВред C ++ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЖрдорддреМрд░ рдкрд░ рдХреБрдЫ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рдирд╛рдо рдореЗрдВ рдирд╛рдорд╕реНрдерд╛рди рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╡рд░реНрдг, рджреЛ рдХреЙрд▓реЛрди (: :) рд╣реИрдВред
  2. рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдмреНрд▓реЙрдХред рд╡реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ:
      ___{}{   }_block_invoke_{2} 

    рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
      ___22-[AXSystemServer init]_block_invoke_0 
  3. рд╢реБрджреНрдз рд╕реА рдлрд╝рдВрдХреНрд╢рдиред
  4. рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдЕрд▓рд░реНрдЯред рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рд╕рд╛рде рдЕрдВрдд рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП _SBMenuButtonPressedNotification ред
  5. рдХреБрдВрдЬреА / рд╕реНрдерд┐рд░рд╛рдВрдХред рдЖрдорддреМрд░ рдкрд░ k рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: _ kCFUserNotificationAlternateButtonTitleKey ред

рдЖрдЧреЗ рдХреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреНрд░рддреАрдХ рдХреА рд╢реНрд░реЗрдгреА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВред
  1. рд╣рдо рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рдлрд╛рдЗрд▓ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:
    рдХреНрд▓рд╛рд╕-рдбрдВрдк-рдЬреЗрдб рдлрд╛рдЙрдВрдбреЗрд╢рди> $ / iOS_pStreet_headers / Foundation.h

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

    рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрднреА-рдХрднреА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛрдб рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЛ рдУрдЯреЛрд▓ рд╕реЗ рдЙрддреНрдкрдиреНрди рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

    рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреЛрдб рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд: рдЖрдк рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ рдЬреИрд╕реЗ рдХрд┐ objc_msgSend (рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛)ред рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдореЗрд╢рд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рдЬреЛ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рд╣реИ (рдмрд╛рдХреА "рд╕рд╛рдорд╛рдиреНрдп" рддрд░реНрдХ рддреАрд╕рд░реЗ, рдЪреМрдереЗ, рдЖрджрд┐ рддрд░реНрдХ рд╣реИрдВ)ред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рд╕ hexdump рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ, hexdump рдорджрдж рдХрд░реЗрдЧрд╛ред
  2. рдЖрдк рддреБрд░рдВрдд рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдмреНрд▓реЙрдХ (рдЖрдорддреМрд░ рдкрд░) рд╕реНрдерд╛рдиреАрдп рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рд╕реЗ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  3. рд╕рдмрд╕реЗ рдХрдард┐рди рд╡рд┐рдХрд▓реНрдкред рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╛рдХреА рдореЗрдВ - рдХреЗрд╡рд▓ рдбрд┐рд╕реНрд╕реИрдбред рдЖрдк рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ "рдЕрдЬреНрдЮрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреИрд╕реЗ рдкрддрд╛ рдХрд░реЗрдВ?"
  4. рдЖрдЗрдП рддреАрди рдореБрдЦреНрдп рдЪреЗрддрд╛рд╡рдиреА рдХреЗрдВрджреНрд░реЛрдВ (рд╕реНрдерд╛рдиреАрдп, рдбрд╛рд░реНрд╡рд┐рди рдФрд░ рдХреЛрд░рдЯреЗрд▓реНрдлреЛрдиреА) рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдореЗрдВ рдЕрд▓рд░реНрдЯ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдпрджрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрд▓рд░реНрдЯ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рджреЛ рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛ рд╕рдХрддреА рд╣реИ:
    - рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд▓рд░реНрдЯ рдПрдХ рдЕрд▓рдЧ, рд╡рд┐рд╢реЗрд╖ рд╕рддрд░реНрдХ рдХреЗрдВрджреНрд░ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдРрд╕реЗ рд╕реВрдЪрдирд╛ рдХреЗрдВрджреНрд░ рдХреЗ рдирд┐рд╢рд╛рди рдЙрд╕реА рдврд╛рдБрдЪреЗ рдореЗрдВ рддрд▓рд╛рд╢рдиреЗ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЕрд▓рд░реНрдЯ рд╣реИред
    - рдЕрд▓рд░реНрдЯ рдбрд┐рд▓реАрд╡рд░реА рдЕрдХреНрд╖рдо рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд▓рд░реНрдЯ рдХреЗ рд╡рд┐рддрд░рдг рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
  5. рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╛ рддреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЗрд╕ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдирд┐рд░рдВрддрд░ рдХреБрдВрдЬреА рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рд╡рд┐рдзрд┐ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдПрдХ рд╣реА рд╢рдмреНрдж рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдирд┐рд░рдВрддрд░ kLockdownDeviceColorKey -> рдлрд╝рдВрдХреНрд╢рди kLockdownDeviceColorKey lockdown_copy_value(...) ;

рдЕрдЬреНрдЮрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреИрд╕реЗ рдкрддрд╛ рдХрд░реЗрдВ?


1. рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЦреЛрдЬреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдо рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЕрдХреНрд╕рд░ рдЪреАрдиреА рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдЖрдпрд╛, рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдХреЛрд░рд┐рдпрд╛рдИ рдФрд░ рдЬрд╛рдкрд╛рдиреА рд╕рд╛рдЗрдЯреЗрдВ рдереАрдВред рдЖрдорддреМрд░ рдкрд░ рдХреЛрдб рд╣реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди, рдЗрд╕ рд╡рд░реНрдЧ, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреА рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
2. рдХрдИ рд╕рд░рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рд╡рдзрд╛рдиреА , рдпрд╣ рдХрд╛рдлреА рдЦрддрд░рдирд╛рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХреБрдЫ рд╕рд░рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЬреИрд╕реЗ рдХрд┐ GSEventSetBackLightLevel, рд╕реНрд╡рдпрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИред
рд╢реВрдиреНрдп GSEventSetBackLightLevel (рдлреНрд▓реЛрдЯ рд╕реНрддрд░);

рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рдореНрди рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (SBGetRingerSwitchState рдлрд╝рдВрдХреНрд╢рди рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ):

  SInt32 ret = 5, out1 = 1, out2 = 2, out3 = 3, out4 = 4; void *libHandle = dlopen(SPRINGBOARD_SERVICES_PATH, RTLD_LAZY); SInt32 (*SBGetRingerSwitchState)(SInt32*,SInt32*,SInt32*,SInt32*) = dlsym(libHandle, "SBGetRingerSwitchState"); ret = SBGetRingerSwitchState(&out1, &out2, &out3, &out4); NSLog(@"%x %x %x %x %x", ret, out1, out2, out3, out4); 

рдЗрд╕ рдХреЛрдб рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╣ рдирд┐рдХрд▓рд╛
1) рдлрд╝рдВрдХреНрд╢рди рдиреЗ рд╕реНрд╡рд┐рдЪ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ 0x10000003 рдорд╛рди рд▓реМрдЯрд╛рдпрд╛ред
2) рдЪрд░ 2 рдиреЗ рдЕрдкрдиреЗ рдореВрд▓реНрдп рдХреЛ рд╕реНрд╡рдпрдВ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рднреА рд╕реНрд╡рд┐рдЪ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред
3) рд╢реЗрд╖ рдЪрд░ рдиреЗ рдЕрдкрдирд╛ рдореВрд▓реНрдп рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред

1) рд╕реЗ рдореИрдВрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░ kern_return_t рдХрд╛ рдорд╛рди kern_return_t , рдХреНрдпреЛрдВрдХрд┐ 0x10000003 MACH_SEND_INVALID_ DEST рд╕рд┐рд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рддреНрд░реБрдЯрд┐ рдЧрд▓рдд рдкреЛрд░реНрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ [рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреЛрд░реНрдЯ рдордЪ рдХрд░реНрдиреЗрд▓ (рдордЪ рдХрд░реНрдиреЗрд▓) рдХрд╛ рдПрдХ рдЕрдореВрд░реНрддрди рд╣реИ, рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ]ред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдкреЛрд░реНрдЯ рдирдВрдмрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╣реИред 2) рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдЗрди рд╕рд░рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ:
  kern_return_t SBGetRingerSwitchState(mach_port_t port, SInt32 *state); 


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

3. рдмреЗрдЪреИрдиреАред рдЙрд╕реА SBGetRingerSwitchState рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ред рд╣рдо рдУрдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

$ otool -p _SBGetRingerSwitchState -tV -arch armv6 SpringBoardServices | рдХрдо
000038cc b5f0 рдкреБрд╢ {r4, r5, r6, r7, lr}
000038ce af03 r7, sp, # 12 рдЬреЛрдбрд╝реЗрдВ
000038d0 b092 рдЙрдк рдПрд╕рдкреА, # 72
000038d2 aa06 r2, sp, # 24 // рд░рдЬрд┐рд╕реНрдЯрд░ r2 рдХрд╛ рдорд╛рди рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рд╣реИ
000038d4 9205 str r2, [sp, # 20]
000038d6 ac08 r4, sp, # 32 // рдЬреЛрдбрд╝реЗрдВ ... рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде r4 рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ
000038d8 ab0f r3, sp, # 60 // ... рдФрд░ r3 рдЬреЛрдбрд╝реЗрдВ
000038da 9304 str r3, [sp, # 16]
000038dc 9103 str r1, [sp, # 12] // r1 рдХрд╛ рдорд╛рди рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ
000038de 4925 ldr r1, [PC, # 148] (0x3974)
000038e0 6011 str r1, [r2, # 0]
000038e2 6020 str r0, [r4, # 0] // r0 рдХрд╛ рдорд╛рди рднреА рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ
...


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

...
00003964 9e04 ldr r6, [sp, # 16]
00003966 6836 ldr r6, [r6, # 0]
00003968 9903 ldr r1, [sp, # 12]
0000396a 600e str r6, [r1, # 0]
// рд▓рдЧрднрдЧ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ (рд╕реА рднрд╛рд╖рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ): * r1 = r6; рдпрд╛рдиреА r1 рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдкрддреЗ рдкрд░, r6 рд╕реЗ рдорд╛рди рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ;
// рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ
0000396c 462e mov r6, r5
0000396e 4630 mov r0, r6
// рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо r0 рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ
00003970 b012 рдЬреЛрдбрд╝реЗрдВ рдПрд╕рдкреА, # 72
00003972 bdf0 рдкреЙрдк {r4, r5, r6, r7, pc}
...


рдиреАрдЪреЗ рдкрдВрдХреНрддрд┐ рд╣реИ:
 int SBGetRingerSwitchState(int arg1, int* arg2); 


рдЗрд╕ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЖрддреЗ рд╣реИрдВ:
 kern_return_t SBGetRingerSwitchState(mach_port_t port, SInt32 *state); 


рд╡рд┐рднрд┐рдиреНрди рдлрд░реНрдорд╡реЗрдпрд░ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдбрд┐рд╡рд╛рдЗрд╕: рдХреНрдпрд╛ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП?

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдкреАрдЖрдИ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдФрд░ рдПрдкреАрдЖрдИ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рд╕рднреА рдлрд░реНрдорд╡реЗрдпрд░ рдкрд░ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, UIDevice-IOKitExtension рдПрдХреНрд╕рдЯреЗрдВрд╢рди (IMEI рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдХреЗ рд╕рднреА рдХрд╛рд░реНрдп рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рд╕рднреА рдлрд░реНрдорд╡реЗрдпрд░ рдкрд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред IOS рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдХреНрдпрд╛ рдмрджрд▓рд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?
рдпрд╣рд╛рдБ рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред


рдЕрдиреБрдХреВрд▓рддрд╛ рдХреЗ рдореБрджреНрджреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░рд▓ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ: рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, -[NSObject respondsToSelector:] ), рдХрдХреНрд╖рд╛рдПрдВ ( NSClassFromString(@"SomeClass") nil рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ SomeClass ), рдЖрджрд┐ред рдФрд░ рдпрд╣ рднреА рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рд╕реЛрдЪреЗрдВ рдХрд┐ рдПрдкреАрдЖрдИ рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЗ рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд┐рдВрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рд╕рдорд╛рдирддрд╛ NULL рдХреЗ рд▓рд┐рдП dlsym (...) рдФрд░ dlopen (...) рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдЙрджрд╛рд╣рд░рдг
рдЙрджрд╛рд╣рд░рдг 1:
рд╕рд╛рдЗрдб рд╡рд╛рдЗрдмреНрд░реЗрд╢рди рд╕реНрд╡рд┐рдЪ (рдЙрд░реНрдл рд░рд┐рдВрдЧ / рд╕рд╛рдЗрд▓реЗрдВрдЯ рд╕реНрд╡рд┐рдЪ, рдореНрдпреВрдЯ рд╕реНрд╡рд┐рдЪ) рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг

рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЬреЛ рдореБрдЭреЗ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рд╡рд╣ рд╕рд╛рдЗрдб рд╕реНрд╡рд┐рдЪ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдореВрд▓ рдореЗрдВ рд░рд┐рдВрдЧ / рд╕рд╛рдЗрд▓реЗрдВрдЯ рд╕реНрд╡рд┐рдЪ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ iPhone рдФрд░ iPad рдореЗрдВ "рд╢рд╛рдВрдд" рдФрд░ рд╕рд╛рдорд╛рдиреНрдп / "рдЬрд╝реЛрд░" рдореЛрдб рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред StackOverflow рдкрд░ рдПрдХ рдЦреЛрдЬ рдиреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рджрд┐рдпрд╛:

 #import <AudioToolbox/AudioToolbox.h> ... /*  : 0:   1:   */ int switchState() { // ... //    ,  //    kAudioSessionCategoryAmbient // ... UInt32 size = sizeof(CFStringRef)); CFStringRef route; AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &route); //     CFIndex len = CFStringGetLength(route); return (len > 0); //   -  ,     ""  } 


рдЬреЛ, рд╣рд╛рд▓рд╛рдБрдХрд┐, iOS 5 рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдирдП API (kAudioSessionProperty_AudioRouteDescription) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЬреЛ рдСрдбрд┐рдпреЛ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред (AUDIOROUTE)

StackOverflow рдкрд░ рдореЗрд░реА рдЖрдЧреЗ рдХреА рдЦреЛрдЬ рдиреЗ рдореБрдЭреЗ рдЗрд╕ рдкреЛрд╕реНрдЯ рдкрд░ рд▓рд╛рдпрд╛ред рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рди AudioServicesAddSystemSoundCompletion () рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рдЧреИрд░-рдорд╛рдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдмрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдерд╛ред

 #import <AudioToolbox/AudioToolbox.h> ... void playSound() { AudioServicesAddSystemSoundCompletion(MySoundId, NULL, NULL, MyAudioServicesSystemSoundCompletionProc, AudioServicesPlaySystemSound(MySoundId); } void MyAudioServicesSystemSoundCompletionProc (SystemSoundID ssID, void *clientData) { //    NSLog(@"Playback has been finished"); } 


рдЧреИрд░-рдорд╛рдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ MyAudioServicesSystemSoundCompletionProc рдХреЙрд▓рдмреИрдХ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдореЗрдВ рдзреНрд╡рдирд┐ рдкреНрд▓реЗрдмреИрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рддреБрд░рдВрдд AudioServicesPlaySystemSound рдХреЛ рдореВрдХ рдореЛрдб рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред рдпрд╣ рд╕реНрд╡рд┐рдЪ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рдорд┐рдпрд╛рдЬрд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдХреА рд▓рдВрдмрд╛рдИ 1 s рд╣реИ, рддреЛ рдореМрди рдФрд░ рд▓рд╛рдЙрдб рдореЛрдб рдореЗрдВ MyAudioServicesSystemSoundCompletionProc () рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдХрд╛ рд╕рдордп 1 s рд╣реИред рдЗрд╕ рдкрд░, рдореИрдВрдиреЗ рд╕рд╛рдЗрдб рд╕реНрд╡рд┐рдЪ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рджреВрд╕рд░рд╛, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдпрд╛ред рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ:

 #import <AudioToolbox/AudioToolbox.h> #import "MuteSwitchTet.h" ... enum MuteSwitchStates { kMuteSwitchUndefined = -1, kSoundless = 0, kSound = 1 }; @implementation MuteSwitchTest ... void MyAudioServicesSystemSoundCompletionProc (SystemSoundID ssID, void *clientData) { // ""  MuteSwitchTest *self = (MuteSwitchTest*)clientData; [NSObject cancelPreviousPerformRequestsWithTarget:self]; self.muteSwitchState = kSoundless; } - (void) cancelSystemSoundCompletion { // ""  AudioServicesRemoveSystemSoundCompletion(SoundID); self.muteSwitchState = kSound; } - (void) startPlayback { AudioServicesAddSystemSoundCompletion(SoundID, NULL, NULL, MyAudioServicesSystemSoundCompletionProc, self); AudioServicesPlaySystemSound(SoundID); [self performSelector:@selector(cancelSystemSoundCompletion) withObject:nil afterDelay:0.1]; } ... @end 


рдпрджреНрдпрдкрд┐ рдпрд╣ рдирдпрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдерд╛ рдФрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рджреЗрд░реА (рд▓рдЧрднрдЧ 1/10 рд╕реЗрдХрдВрдб) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ред рджреЗрд░реА рдХреЛ рдХрдо рдХрд░рдиреЗ рд╕реЗ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдкреИрджрд╛ рд╣реБрдИред рджреВрд╕рд░реЗ, рдЗрд╕рдХрд╛ рдПрдХ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдерд╛ - рдЬреЛ рдЦреБрдж рдмрдЬрдиреЗ рд╡рд╛рд▓рд╛ рд╕рд╛рдЙрдВрдб рдерд╛, рдЬреЛ рдпреВрдЬрд░ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рддреЗрдЬ рдЖрд╡рд╛рдЬ рдХрд░рддрд╛ рдерд╛ред рдмрд╛рдж рдореЗрдВ, рдореИрдВрдиреЗ рдХреГрддреНрд░рд┐рдо рд░реВрдк рд╕реЗ рдСрдбрд┐рдпреЛ рдПрдбрд┐рдЯрд░ рдореЗрдВ рд╡реЙрд▓реНрдпреВрдо рдХреЛ рд╢реВрдиреНрдп рдХрд░ рджрд┐рдпрд╛ред рддреАрд╕рд░рд╛, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЧрдВрджреЗ рд╣реИрдХ рдХреА рддрд░рд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, VSSilentSwitch рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЛ рдЙрдирдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдмреЗрдЪрдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рдерд╛, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдЙрд╕реА рдкреНрд░рднрд╛рд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред

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

$ sh ~ / рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ / LookSDKForSymbol.sh RingerSwitch
# рдХреБрдЫ рдкрд░рд┐рдгрд╛рдо рдЫреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВ
0000d738 S _kGSRingerSwitchCapability
рдЗрд╕рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ред/System/Library/PStreetFrameworks/GraphicsServices.framework/GraphicsServices
000038cc T _SBGetRingerSwitchState
0000370c T _SBGetRingerSwitchState
рдЗрд╕рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ред/System/Library/PStreetFrameworks/SpringBoardServices.framework/SpringBoardServices


SBGetRingerSwitchState рдирд╛рдордХ рдПрдХ рдлреАрдЪрд░ рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред

рд╡рд╛рдВрдЫрд┐рдд рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
 mach_port_t SBSSpringBoardServerPort(); 

рдЙрд╕реА рдврд╛рдВрдЪреЗ рд╕реЗред

рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ:
 @implementation MuteSwitchTest ... - (int) switchState { //  SBSSpringBoardServerPort  SBGetRingerSwitchState //     MuteSwitchTest mach_port_t port = SBSSpringBoardServerPort(); SInt32 state; SBGetRingerSwitchState(port, &state); return (int)state; } 

рдЙрджрд╛рд╣рд░рдг 2:
рдЖрдИрдПрдордИрдЖрдИ рдкрд░рд┐рднрд╛рд╖рд╛

IMEI (рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдг рдкрд╣рдЪрд╛рди) - рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рди
рдкреНрд░рддреНрдпреЗрдХ рдлреЛрди рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдлреЛрди рдХрд╛ рдореИрдХ рдПрдбреНрд░реЗрд╕ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдлреЛрди рдореЗрдВ рдореИрдХ рдПрдбреНрд░реЗрд╕ рднреА рд╣реЛрддрд╛ рд╣реИ)

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

рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ, UIDevie (IOKit_Extensions) IMEI рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ iOS 4 рдХреЗ рд╕рд╛рде iPhone 4 рдФрд░ iOS 4.3 рдХреЗ рд╕рд╛рде iPad рдкрд░ рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдореИрдВ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рдмреАрдЯрд╛ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ IMEI рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдирдП рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: iPad 2, рдирдпрд╛ iPad рдФрд░ iPhone 4Sред рдХрд╛рд░рдгреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реНрдЯреИрдХрдСрд╡рд░рдлреНрд▓реЛ рдЧрдпрд╛, рдЬрд╣рд╛рдВ рдореЗрд░реЗ рдбрд░ рдХреА рдкреБрд╖реНрдЯрд┐ рд╣реБрдИред рдЦреЛрдЬреЛрдВ рдиреЗ рдореБрдЭреЗ рдлрд┐рд░ CoreTelephony рдирд╛рдордХ рдПрдХ рдврд╛рдВрдЪреЗ рддрдХ рдкрд╣реБрдВрдЪрд╛рдпрд╛ред

$ nm -g ./CoreTelephony | grep- рдЖрдИ imei
U _kCFAbsoluteTimeIntervalSince1970
00053b28 S _kCTMobileEampleInfoIMEI
00053ad4 S _kCTPostponementInfoIMEI
00053ac4 S _kCTPostponementStatusErrorDefaultIMEI
$ nm -g ./CoreTelephony | grep
000260e4 T __CServerConnectionCopyMobileEampleInfo
00053b34 S _kCTMobileEampleInfo1xIMSI
00053b20 S _kCTMobileEampleInfoCurrentMobileId
00053b24 S _kCTMobileEampleInfoCurrentSubscriberId
00053b40 S _kCTMobileEampleInfoERIVersion
00053b2c S _kCTMobileEampleInfoICCID
00053b28 S _kCTMobileEampleInfoIMEI
00053b30 S _kCTMobileEampleInfoIMSI
00053b38 S _kCTMobileEampleInfoMEID
00053b44 S _kCTMobileEampleInfoMIN
00053b3c S _kCTMobileEampleInfoPRLVersion

рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди (_CServerConnectionCopyMobileEampleInfo (...)) рдПрдХ рд╢рдмреНрджрдХреЛрд╢ (CF рдврдВрдвреЛрд░рдЪреА) рдХреЛ рдкреНрд░рдкрддреНрд░ kCTMobileEampleInfo * рдХреА рдХреБрдВрдЬреА рдФрд░ рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рдмрд╛рд░ рдореБрдЭреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрд╣рд╛рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред _CServerConnectionCopyMobileEampleInfo рдХреЗ рд▓рд┐рдП Google рдЦреЛрдЬ рдиреЗ рдореБрдЭреЗ рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛, рдФрд░ рдЬрд▓реНрдж рд╣реА IMEI рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рддреИрдпрд╛рд░ рд╣реЛ рдЧрдпрд╛ред

 //         #include "CoreTelephony.h" ... NSString* CTGetIMEI { struct CTResult it; NSMutableDictionary *dict; CTServerConnectionRef conn; conn = _CTServerConnectionCreate(kCFAllocatorDefault, ConnectionCallback, NULL); _CTServerConnectionCopyMobileEquipmentInfo(&it, conn, &(CFMutableDictionaryRef)dict); CFRelease(conn); [dict autorelease]; return [dict objectForKey: kCTMobileEquipmentInfoIMEI]; } 

рдпрд╣ IMEI рдбрд┐рдЯреЗрдХреНрд╢рди рдореЗрдердб рд╕рднреА рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдмрд╛рдж рдореЗрдВ рдореБрдЭреЗ IMEI (рд▓реЙрдХрд╡реЙрдиреНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдорд┐рд▓рд╛ред

рдЙрджрд╛рд╣рд░рдг 3:
рдЕрдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЕрд▓рд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ: рд╡реЙрд▓реНрдпреВрдо рдмрдЯрдиред

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрдерд╛ рдХрд┐ "рдЕрдзрд┐рд╕реВрдЪрдирд╛" рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рд╡рд░реНрдг рдирд┐рд░рдВрддрд░ рд╕рд┐рд╕реНрдЯрдо рдЕрд▓рд░реНрдЯ рдХрд╛ рдирд╛рдо рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ [NSNotificationCenter defaultCenter] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
$ sh ~ / рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ / LookSDKForSymbol.sh рдЕрдзрд┐рд╕реВрдЪрдирд╛ $ рдорд╛рддреНрд░рд╛ рдкрд░рд┐рд╡рд░реНрддрди
001dbe60 S _MPAVControllerVolumeDidChangeNotification
001dbe64 S _MPAVControllerVolumeMutedDidChangeNotification
001dc4f8 S _MPMusicPlayerControllerVolumeDidChangeNotification
001dc314 S _MPVolumeViewRouteButtonChangedNotification
001dc310 S _MPVolumeViewVisibilityChangedNotification
рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ ред/System/Library/Frameworks/MediaPlayer.framework/MediaPlayer

000d6d24 D _AVController_EffectiveVolumeDidChangeNotification
000d6d60 D _AVController_VolumeDidChangeNotification
000d6fec D _AVSystemController_CurrentRouteHasVolumeControlDidChange рдЖрд╡рдзрд┐рдХрд░рдг
000d6ffc D _AVSystemController_EffectiveVolumeDidChangeNotification
000d6fdc D _AVSystemController_SystemVolumeDidChangeNotification
рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ ред/System/Library/PStreetFrameworks/Celestial.framework/Celestial
... рдФрд░ рдЕрдиреНрдп рдврд╛рдВрдЪреЗ рд╕реЗ рд▓рдЧрднрдЧ рдПрдХ рджрд░реНрдЬрди рдЕрдзрд┐рдХ

рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЬрд╛рдВрдЪрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдХрд┐ рд╡реЙрд▓реНрдпреВрдо рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдЕрд▓рд░реНрдЯ рдЖрдП рдереЗред
рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдЕрдзрд┐рд╕реВрдЪрдирд╛рдУрдВ рдХреА рдмрдбрд╝реА рд╕реВрдЪреА рд╕реЗ, рдХреЗрд╡рд▓ рдпреЗ 2 рдЖрдП:

AVController_EffectiveVolumeDidChangeNotification
AVController_VolumeDidChangeNotification

рдЗрди рдЕрд▓рд░реНрдЯ рдХрд╛ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐
1) рдЖрдк рд╕реАрдзреЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХрд┐ рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рдмрдЯрди рджрдмрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
2) рдпрд╣ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдмрдЯрди рдХрдм рджрдмрд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдХрдм

рдореИрдВ рдЕрдиреНрдп рдХреАрд╡рд░реНрдб рдЦреЛрдЬ рд░рд╣рд╛ рд╣реВрдВ:
$ sh ~ / рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ / LookSDKForSymbol.sh рд╡реЙрд▓реНрдпреВрдо рдмрдЯрди
001b221c t - [UIApplication setWantsVolumeButtonEvents:]
003cce5c t _SBSetWantsVolumeButtonEvents $ рд╢рд┐рдо
0054478c S __UIApplicationVolumeDownButtonDownNotification
00544 790 S __UIApplicationVolumeDownButtonUpNotification
00544784 S __UIApplicationVolumeUpButtonDownNotification
00544788 S __UIApplicationVolumeUpButtonUpNotification
рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ ./System/Library/Frameworks/UIKit.framework/UIKit
... рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЪреМрдЦрдЯреЛрдВ рд╕реЗ рдХреБрдЫ рджрд░реНрдЬрди рдЕрдзрд┐рдХ

UIKit рдХреЗ рдЪрд╛рд░ рдЕрд▓рд░реНрдЯ рдиреЗ рддреБрд░рдВрдд рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛: рдЙрдирд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЖрджреЗрд╢ рдЬрд╛рд░реА рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
  [[UIApplication sharedApplication] setWantsVolumeButtonEvents: YES]; 

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕рдВрдмрдВрдзрд┐рдд рдмрдЯрди рджрдмрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрдирд╛рдПрдВ рдЖрдиреЗ рд▓рдЧреАрдВред
рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ: рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рд╡реЙрд▓реНрдпреВрдо рдмрдЯрди рдЕрдм рд╡реЙрд▓реНрдпреВрдо рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдмрдЯрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
  [[UIApplication sharedApplication] setWantsVolumeButtonEvents: NO]; 

рдЙрджрд╛рд╣рд░рдг 4:
рдЕрдирдбрд╛рдпрд░реЗрдХреНрдЯреЗрдб рдЕрд▓рд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рд┐рдо рд╕реНрдерд┐рддрд┐

рд╣рдо рд╕рд┐рджреНрдз рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:
$ sh ~ / рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ / LookSDKForSymbol.sh рдЕрдзрд┐рд╕реВрдЪрдирд╛ $ рд╕рд┐рдо
...
00052560 S _kCSIMSupportSIMInsertionNotification
00052564 S _kCSIMSupportSIMStatusChangeNotification
...
000525bc S _kCSIMSupportSIMTrayStatusNotification
...
рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ ред/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony
...
рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ ./System/Library/PStreetFrameworks/FTServices.framework/FTServices
$


рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдЕрд▓рд░реНрдЯ рдореБрдЭреЗ рдирд╛рдореЛрдВ рдХреЗ рддрд╣рдд рд▓рдЧ рд░рд╣реЗ рдереЗ:
1) kCSIMSupportSIMInsertionNotification
2) kCSIMSupportSIMStatusChangeNotification
3) kCSIMSupportSIMTrayStatusNotification

рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рд┐рдо рдХрд╛рд░реНрдб рдбрд╛рд▓рдиреЗ рдХреЗ рд╕рдордп (1) рдХрд╣рд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЕрд▓рд░реНрдЯ (рдореИрдВ рдкрд╣рд▓реЗ рдирд╛рдо рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рдерд╛), (2) рдареАрдХ рдЙрд╕реА рд╕рдордп рдЖрдпрд╛ рдЬрдм рдореБрдЭреЗ рдЬрд░реВрд░рдд рдереА (рдбрд╛рд▓рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рдордп), рд╕реВрдЪрдирд╛рдПрдБ (3) ) рдмрд┐рд▓рдХреБрд▓ рдирд╣реАрдВ рдЖрдпрд╛ред рдмрд╛рдж рдореЗрдВ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЕрд▓рд░реНрдЯ (3) рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рддрд░реНрдХрддрд╛ рдХреЗрдВрджреНрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдЬрд┐рд╕реЗ CTTelephonyCenter рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдпрд╣рд╛рдВ CTTelephonyCenter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд┐рдо рд╕реНрдерд┐рддрд┐ рдЕрд▓рд░реНрдЯ:

 #include "CoreTelephony.h" - (void) notificationCallback:(NSNotification)notification { ... } - (void) startUpdateSIMStatus { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationCallback:) name:kCTSIMSupportSIMStatusChangeNotification object:nil ]; } - (void) stopUpdateSIMStatus { [[NSNotificationCenter defaultCenter] removeObserver:self name:kCTSIMSupportSIMStatusChangeNotification object:nil]; } 


рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рддрд╛ рд╣реИ

1. рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдзреНрд╡рдирд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

www.iphonedevwiki.net/index.php/AudioServices - рдпрд╣рд╛рдВ рдмрдЯрди рджрдмрд╛рдП рдЬрд╛рдиреЗ рдЬреИрд╕реЗ рдорд╛рдирдХ рд▓рдШреБ (<30sec) рдзреНрд╡рдирд┐рдпреЛрдВ рдХреЛ рдмрдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП SystemSoundID рдЬреИрд╕реЗ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд┐рд░рд╛рдВрдХ рдмрддрд╛рдП рдЧрдП рд╣реИрдВред рдЖрдк рдЙрди рд╕рднреА рдХреЛ рд╕реНрд╡рдпрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдПрдХ рдЪрдХреНрд░ рдореЗрдВ 1000 рд╕реЗ рдорд╛рдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЫрдВрдЯрдиреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк рдЕрднреА рднреА рдорд╛рдирдХ рд░рд┐рдВрдЧрдЯреЛрди рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ:

 - (void) playDefaultRingTone { NSURL *defaultRingTone = [NSURL URLWithString:@"/System/Library/CoreServices/SpringBoard.app/ring.m4r"]; AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:defaultRingTone error:nil]; [player play]; } 

2. UIView рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЦреЛрдЬ

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдпреВрдЖрдИрд╡реАрд╡рд╛рдИ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг (рдкрд░реНрдпрд╡реЗрдХреНрд╖рдг) рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдмрдЪреНрдЪреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ (рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░) рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рд╢реАрд░реНрд╖ (рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рд╕рдмрд╕реЗ рдКрдкрд░) UIWindow рдСрдмреНрдЬреЗрдХреНрдЯ (s) рд╣реИред рдпрджрд┐ рдЖрдк рдкреВрд░реЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдПрдХ рд╕реВрдХреНрд╖реНрдорддрд╛ рд╣реИ: рдЕрдЬреАрдм рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ UIWindow рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
__ all__ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдЕрдирдХрдореНрдбрд░реНрдб рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛

  + [UIWindow allWindowsIncludingInternalWindows: onlyVisibleWindows:] 


рдЗрд╕рдХреА рдорджрдж рд╕реЗ, рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рдХрд┐ рд╕рдмрд╕реЗ рд╕рд╛рдзрд╛рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдЪрд╛рд░ рд╡рд┐рдВрдбреЛ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ! (UIWindow)
1) рдПрдХ рдирд┐рдпрдорд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд┐рдВрдбреЛ
2) рд╕реНрдЯреЗрдЯрд╕ рдмрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдВрдбреЛ (рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - [UIApplication statusBarWindow])
3) UIAlertView рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдВрдбреЛ (рдкреНрд░рдХрд╛рд░ UIAlertView рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓ рджреГрд╢реНрдп)ред
4) рдСрди-рд╕реНрдХреНрд░реАрди рдХреАрдмреЛрд░реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдВрдбреЛред

рд╣рдо рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?

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

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ, рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рднреА рд╣реИрдВред рдХреБрдЫ рдЧреНрд░рд╛рдлрд┐рдХ рддрддреНрд╡ рд╕реАрдзреЗ рдПрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЧрд╣рд░реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
 @interface UIStatusBarSignalStrengthItemView : UIStatusBarItemView { @private int _signalStrengthRaw; int _signalStrengthBars; BOOL _enableRSSI; BOOL _showRSSI; } -(id)_stringForRSSI; -(float)extraRightPadding; -(void)touchesEnded:(id)ended withEvent:(id)event; -(id)contentsImageForStyle:(int)style; -(BOOL)updateForNewData:(id)newData actions:(int)actions; @end 

рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, UIStatusBarSignalStrengthItemView рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╕реЗрд▓реБрд▓рд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ RSSI (рдкреНрд░рд╛рдкреНрдд рд╕рд┐рдЧреНрдирд▓ рд╕реНрдЯреНрд░реЗрдВрде) рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХрд╛рдиреВрдиреА рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рдФрд░ рдХрд┐рд╕реА рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕рднреА рджреГрд╢реНрдпрдорд╛рди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП рдХреЛрдб рдХреА рдкреВрд░реА рд╕реВрдЪреАред рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ [UIView рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг]:
 @interface UIView (RecursiveDescription) - (void) recursiveDescription; + (void) completeDescription @end @implementation UIView (RecursiveDescription) - (void) recursiveDescription { NSLog(@"______________________________________"); NSLog(@"%@", self); NSArray *subviews_ = [self subviews]; if ([subviews_ count] > 0) { for (UIView *subview_ in subviews_) { [subview_ recursiveDescription]; } } } - (void)completeDescription { NSArray *windows = [UIWindow allWindowsIncludingInternalWindows:YES onlyVisibleWindows:NO]; for (UIView *view in windows) { [view recursiveDescription]; } } @end 

3. рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рдореНрди-рд╕реНрддрд░реАрдп iOS рд╕рдмрд╕рд┐рд╕реНрдЯрдо


MIG рд╕рдмрд╕рд┐рд╕реНрдЯрдо (MIG-рд╕рдмрд╕рд┐рд╕реНрдЯрдо, рдордЪ рдЗрдВрдЯрд░рдлреЗрд╕ рдЬреЗрдирд░реЗрдЯрд░) рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХрд░реНрдиреЗрд▓ (рддрдерд╛рдХрдерд┐рдд "рдордЪ рдХрд░реНрдиреЗрд▓") рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИред рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдордЖрдИрдЬреА-рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдпрд╣рд╛рдБ рд╣реИ: www.opensource.apple.com/source/xnu/xnu-1228.0.2/libsyscall/mach ред рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА рднреА рджреЗрдЦреЗрдВ: www.iphonedevwiki.net/index.php/MIG_bubsystem ред

IORegistry, I / O рд░рдЬрд┐рд╕реНрдЯреНрд░реА - рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рд░рдЬрд┐рд╕реНрдЯреНрд░реА; рдПрдХ рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдЬреЛ iPhone рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдФрд░ рдпрд╣ рдХреИрд╕реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреА рд╣реИред IORegistry рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдПрд░рд┐рдХрд╛ рд╕рджреБрди рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рджреЗрдЦреЗрдВ UIDevice-IOKitExtensions )ред

рдЙрдкрдХрд░рдг

рдПрдирдПрдо рдПрдХ рдпреВрдирд┐рдХреНрд╕ рдпреВрдЯрд┐рд▓рд┐рдЯреА рд╣реИ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдирдИ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкреНрд░рддреАрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдПрдирдПрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВрдиреЗ рдПрдХ рд╕рд░рд▓ (рдФрд░ рдмрд▓реНрдХрд┐ рдЧреВрдВрдЧрд╛) рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рдЬреЛ рдЖрдИрдУрдПрд╕ рдПрд╕рдбреАрдХреЗ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЦреЛрдЬрддреА рд╣реИред

LookSDKForSymbol.sh:
  #!/bin/bash SDK=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk PrivateFrameworks=$SDK/System/Library/PrivateFrameworks Frameworks=$SDK/System/Library/Frameworks Lib=$SDK/usr/lib cd $SDK for i in $(find -f .); do test -f $i && nm $i | c++filt | grep -i "$1" | grep -i "$2" | grep -i "$3" && echo "Found in $i "; done 

c ++ filt - рдирд╛рдореЛрдВ рдХреА рдмрд╣рд╛рд▓реА ( рдбреАрдордВрдЧреНрд▓рд┐рдВрдЧ )ред рдХреЗрд╡рд▓ C ++ рдХреЗ рд▓рд┐рдП; рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдФрд░ рд╕реА рд╕рд┐рд░реНрдл рдорд╛рдирд╡-рдкрдардиреАрдп рд░реВрдк рдореЗрдВ рддреБрд░рдВрдд рдЬрд╛рддреЗ рд╣реИрдВред
рдУрдЯреВрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдбрд┐рд╕рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИред
рд╣реЗрдХреНрд╕рдбрдВрдк - рдбрдВрдк рдЗрдЯ рдбрдВрдк :-)
рдХреНрд▓рд╛рд╕-рдбрдВрдк-рдЬреЗрдб рдПрдХ рд╕реБрдкрд░ рдЙрдкрдпреЛрдЧреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рднреА рд╕рдВрд░рдЪрдирд╛рдУрдВ, рдкреНрд░реЛрдЯреЛрдХреЙрд▓реЛрдВ, рд╡рд░реНрдЧреЛрдВ, рд╢реНрд░реЗрдгрд┐рдпреЛрдВ, рдЙрдирдХреЗ рддрд░реАрдХреЛрдВ, рдЧреБрдгреЛрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рд╡рд┐рд╡рд░рдгред
Google рдХреЛрдб рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА - рдпрд╣рд╛рдВ рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдЙрдкрдпреЛрдЧреА рд╕рдВрд╕рд╛рдзрди, рд╕реНрд░реЛрдд

рд╡рд┐рдХреА

www.iphonedevwiki.net
рдХреЗрд╡рд▓ рд╡рд┐рдХреА рдореБрдЭреЗ рдЬреЗрд▓рдмреНрд░реЗрдХ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдкреБрд░рд╛рдиреА рд╣реИ
(iOS 3.x, iOS 4.x), рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рдПрдХ рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рд╕рдВрд╕рд╛рдзрди рд╣реИред

рд╡реНрдпрдХреНрддрд┐

1. рдЬреЗ рдлреНрд░реАрдореИрди, saurik
www.saurik.com

2. рдПрд░рд┐рдХрд╛ рд╕рджреВрди , рдЖрдИрдлреЛрди рдбреЗрд╡рд▓рдкрд░ рдХреА рдХреБрдХрдмреБрдХ рдФрд░ рдж рдЖрдИрдУрдПрд╕ 5 рдбреЗрд╡рд▓рдкрд░ рдХреА рдХреБрдХрдмреБрдХ рдХреА рд▓реЗрдЦрд┐рдХрд╛: рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрд░ рдХреЙрдиреНрд╕реЗрдкреНрдЯреНрд╕ рдФрд░ рдПрд╕реЗрдВрд╢рд┐рдпрд▓ рд░реЗрд╕рд┐рдкреАрдЬ: рд╕рд╛рде рд╣реА рдХрдИ рдЙрдкрдпреЛрдЧреА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВред рдЙрдирдХреА рдкреБрд╕реНрддрдХреЛрдВ рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреА рдХреБрдЫ рдЕрдирдЫреБрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реИред
ericasadun.com

рдХреБрдЫ рдПрд░рд┐рдХрд╛ рд╕рджреБрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ:
github.com/erica/iOS-5-Cookbook
github.com/erica/iphone-3.0-cookbook-

github.com/erica/uidevice-extension

3. KennyTM / networkpx, рдХреНрд▓рд╛рд╕-рдбрдВрдк-рдЬреЗрдб рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдирдЬрд╛рдиреЗ
рдиреЗрдЯрд╡рд░реНрдХ x рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдкрд░ StackOverflow.com рдХрд╛ рд╕рдХреНрд░рд┐рдп рд╕рджрд╕реНрдп рд╣реИ ред blogspot.com API
code.google.com/p/networkpx
githubред com / kennytm
stackoverflow.com/users/224671/kennytm

github.com/kennytm/iphone-pStreet-frameworks
рдЬрд╛рдирдХрд╛рд░реА рдмрд╣реБрдд рдкреБрд░рд╛рдиреА (iOS 3) рд╣реИред

рдХрд┐рддрд╛рдмреЗрдВ

"рдЖрдИрдлреЛрди рдбреЗрд╡рд▓рдкрд░ рдХреА рдХреБрдХрдмреБрдХ" (рдЖрдИрдУрдПрд╕ 5 рдбреЗрд╡рд▓рдкрд░ рдХреА рдХреБрдХрдмреБрдХ: рдХреЛрд░ рдХреЙрдиреНрд╕реЗрдкреНрдЯреНрд╕ рдФрд░ рдЖрдИрдУрдПрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡реНрдпрдВрдЬрдиреЛрдВ) рднреА рдЖрдИрдУрдПрд╕ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдирдбреВрд╕реНрдб рдЖрдИрдУрдПрд╕ рдлреАрдЪрд░ рд╣реИрдВред
рд░реВрд╕реА рдЕрдиреБрд╡рд╛рдж: рдЕрдиреБрд╡рд╛рджрд┐рдд. by/ you / iphone- developers-cookbook-development-native-applications-for-the-iphone/ into- ru/
trans

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


All Articles