macOS XPC
Basic Information
XPC, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм XNU (macOS рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХрд░реНрдиреЗрд▓) рдЗрдВрдЯрд░-рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрдЪрд╛рд░ рд╣реИ, macOS рдФрд░ iOS рдкрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдврд╛рдВрдЪрд╛ рд╣реИред XPC рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕реБрд░рдХреНрд╖рд┐рдд, рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдкреНрдкрд▓ рдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░-рд╕реЗрдкрд░реЗрдЯреЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рдЙрд╕реЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕рдордЭреМрддрд╛ рдХрд┐рдП рдЧрдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдиреБрдХрд╕рд╛рди рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред
XPC рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдВрдЯрд░-рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрдЪрд╛рд░ (IPC) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╕реЗрдЯ рд╣реИ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдХ рд╣реА рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ, рдбреЗрдЯрд╛ рдХреЛ рдЖрдЧреЗ-рдкреАрдЫреЗ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдПред
XPC рдХреЗ рдкреНрд░рд╛рдердорд┐рдХ рд▓рд╛рднреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
рд╕реБрд░рдХреНрд╖рд╛: рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдХрд╛рд░реНрдп рдХреЛ рдЕрд▓рдЧ рдХрд░рдХреЗ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЗрд╡рд▓ рд╡рд╣реА рдЕрдиреБрдорддрд┐рдпрд╛рдБ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ рдЬрд┐рдирдХреА рдЙрд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдордЭреМрддрд╛ рдХрд░ рд▓реА рдЬрд╛рддреА рд╣реИ, рддреЛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдиреБрдХрд╕рд╛рди рдХрд░рдиреЗ рдХреА рд╕реАрдорд┐рдд рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИред
рд╕реНрдерд┐рд░рддрд╛: XPC рдХреНрд░реИрд╢ рдХреЛ рдЙрд╕ рдШрдЯрдХ рддрдХ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рд╡реЗ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрд░реИрд╢ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрд┐рдирд╛ рдмрд╛рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рджрд░реНрд╢рди: XPC рдЖрд╕рд╛рди рд╕рдорд╡рд░реНрддреАрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХрдорд╛рддреНрд░ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ XPC рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдирд╛ рдХрдо рдкреНрд░рднрд╛рд╡реА рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЬ рдХреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рд▓рдЧрднрдЧ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ рдФрд░ рд▓рд╛рдн рдмреЗрд╣рддрд░ рд╣реИрдВред
Application Specific XPC services
рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ XPC рдШрдЯрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рд╣реА рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Safari рдореЗрдВ рдЖрдк рдЗрдиреНрд╣реЗрдВ /Applications/Safari.app/Contents/XPCServices
рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдирдХреЗ рдкрд╛рд╕ .xpc
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реЛрддрд╛ рд╣реИ (рдЬреИрд╕реЗ com.apple.Safari.SandboxBroker.xpc
) рдФрд░ рдпреЗ рдореБрдЦреНрдп рдмрд╛рдЗрдирд░реА рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рд╣реЛрддреЗ рд╣реИрдВ: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/MacOS/com.apple.Safari.SandboxBroker
рдФрд░ рдПрдХ Info.plist: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/Info.plist
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ, рдПрдХ XPC рдШрдЯрдХ рдХреЗ рдкрд╛рд╕ рдЕрдиреНрдп XPC рдШрдЯрдХреЛрдВ рдпрд╛ рдореБрдЦреНрдп рдРрдк рдмрд╛рдЗрдирд░реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЕрдзрд┐рдХрд╛рд░ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реЛрдВрдЧреАред рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрджрд┐ рдПрдХ XPC рд╕реЗрд╡рд╛ рдХреЛ JoinExistingSession рдЗрд╕рдХреЗ Info.plist рдлрд╝рд╛рдЗрд▓ рдореЗрдВ тАЬTrueтАЭ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, XPC рд╕реЗрд╡рд╛ рдЙрд╕ рд╕реБрд░рдХреНрд╖рд╛ рд╕рддреНрд░ рдореЗрдВ рдЪрд▓реЗрдЧреА рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗ рдЗрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ред
XPC рд╕реЗрд╡рд╛рдПрдБ launchd рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреВрд░реНрдг рд╣реЛрдиреЗ рдкрд░ рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдВрдж рдХрд░ рджреА рдЬрд╛рддреА рд╣реИрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рд╡рд┐рд╢рд┐рд╖реНрдЯ XPC рдШрдЯрдХ рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЬреЛрдЦрд┐рдо рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред
System Wide XPC services
рд╕рд┐рд╕реНрдЯрдо-рд╡реНрдпрд╛рдкреА XPC рд╕реЗрд╡рд╛рдПрдБ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реИрдВред рдпреЗ рд╕реЗрд╡рд╛рдПрдБ, рдЪрд╛рд╣реЗ launchd рдпрд╛ Mach-рдкреНрд░рдХрд╛рд░ рдХреА рд╣реЛрдВ, рдЙрдиреНрд╣реЗрдВ plist рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрддреА рд╣реИрдВ рдЬреИрд╕реЗ /System/Library/LaunchDaemons
, /Library/LaunchDaemons
, /System/Library/LaunchAgents
, рдпрд╛ /Library/LaunchAgents
ред
рдЗрди plist рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА рд╣реЛрдЧреА рдЬрд┐рд╕реЗ MachServices
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗрд╡рд╛ рдХрд╛ рдирд╛рдо рд╣реЛрдЧрд╛, рдФрд░ рдПрдХ рдХреБрдВрдЬреА рд╣реЛрдЧреА рдЬрд┐рд╕реЗ Program
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрд╛рдЗрдирд░реА рдХрд╛ рдкрде рд╣реЛрдЧрд╛:
The ones in LaunchDameons
root рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдПрдХ рдЕрдкреНрд░рд┐рд╡рд┐рд▓реЗрдЬреНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░ рд╕рдХрддреА рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреА рд╣реИред
XPC рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕
xpc_object_t
рд╣рд░ XPC рд╕рдВрджреЗрд╢ рдПрдХ рдбрд┐рдХреНрд╢рдирд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рдФрд░ рдбреАрд╕рд┐рд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, libxpc.dylib
рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛред C API рдореЗрдВ рд╣рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ xpc_object_t
рд╣реИ (рдФрд░ рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ xpc_get_type(object)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝рдВрдХреНрд╢рди xpc_copy_description(object)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдХреБрдЫ рд╡рд┐рдзрд┐рдпрд╛рдБ рднреА рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ xpc_<object>_copy
, xpc_<object>_equal
, xpc_<object>_hash
, xpc_<object>_serialize
, xpc_<object>_deserialize
...
xpc_object_t
рдХреЛ xpc_<objetType>_create
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ _xpc_base_create(Class, Size)
рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдХреНрд▓рд╛рд╕ рдХрд╛ рдкреНрд░рдХрд╛рд░ (рдПрдХ XPC_TYPE_*
рдореЗрдВ рд╕реЗ) рдФрд░ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ (рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд 40B рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЖрдХрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдбреЗрдЯрд╛ 40B рдХреЗ рдСрдлрд╕реЗрдЯ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, xpc_<objectType>_t
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ xpc_object_t
рдХрд╛ рдЙрдкрд╡рд░реНрдЧ рд╣реИ рдЬреЛ os_object_t*
рдХрд╛ рдЙрдкрд╡рд░реНрдЧ рд╣реЛрдЧрд╛ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ xpc_dictionary_[get/set]_<objectType>
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдпрд╛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
xpc_pipe
рдПрдХ xpc_pipe
рдПрдХ FIFO рдкрд╛рдЗрдк рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреА рд╣реИрдВ (рд╕рдВрд╡рд╛рдж рдореЗрдВ Mach рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ)ред
рдПрдХ XPC рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП xpc_pipe_create()
рдпрд╛ xpc_pipe_create_from_port()
рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ Mach рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░, рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП xpc_pipe_receive
рдФрд░ xpc_pipe_try_receive
рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ xpc_pipe
рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ xpc_object_t
рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреЗ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рджреЛ Mach рдкреЛрд░реНрдЯ рдФрд░ рдирд╛рдо (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред рдирд╛рдо, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдорди secinitd
рдЕрдкрдиреЗ plist /System/Library/LaunchDaemons/com.apple.secinitd.plist
рдореЗрдВ рдкрд╛рдЗрдк рдХреЛ com.apple.secinitd
рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред
рдПрдХ xpc_pipe
рдХрд╛ рдЙрджрд╛рд╣рд░рдг bootstrap pipe рд╣реИ рдЬреЛ launchd
рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ Mach рдкреЛрд░реНрдЯ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
NSXPC*
рдпреЗ Objective-C рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ рдЬреЛ XPC рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХрд╛ рдЕрдореВрд░реНрддрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ DTrace рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдкрд┐рдЫрд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред
GCD Queues
XPC рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GCD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдХреБрдЫ рдбрд┐рд╕реНрдкреИрдЪ рдХрддрд╛рд░реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ xpc.transactionq
, xpc.io
, xpc-events.add-listenerq
, xpc.service-instance
...
XPC рд╕реЗрд╡рд╛рдПрдБ
рдпреЗ .xpc
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд╛рд▓реЗ рдмрдВрдбрд▓ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ XPCServices
рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реИрдВ рдФрд░ Info.plist
рдореЗрдВ рдЙрдирдХреЗ рдкрд╛рд╕ CFBundlePackageType
XPC!
рдкрд░ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреБрдВрдЬреА рд╣реЛрддреА рд╣реИрдВ рдЬреИрд╕реЗ ServiceType
рдЬреЛ Application, User, System рдпрд╛ _SandboxProfile
рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдПрдХ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ рдпрд╛ _AllowedClients
рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдЕрдзрд┐рдХрд╛рд░ рдпрд╛ ID рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ рдЬреЛ рд╕реЗрд╡рд╛ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпреЗ рдФрд░ рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк рд╕реЗрд╡рд╛ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╕рдордп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗред
рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдирд╛
рдРрдк xpc_connection_create_mach_service
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ XPC рд╕реЗрд╡рд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ launchd рдбреЗрдорди рдХреЛ рдвреВрдВрдврддрд╛ рд╣реИ рдФрд░ xpcproxy
рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред xpcproxy
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП FDs рдФрд░ Mach рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛ рдХреЛ рд╕реНрдкреЙрди рдХрд░рддрд╛ рд╣реИред
XPC рд╕реЗрд╡рд╛ рдХреА рдЦреЛрдЬ рдХреА рдЧрддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
xpcproxy
рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
The XPC рд▓рд╛рдЗрдмреНрд░реЗрд░реА kdebug
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рддрд╛рдХрд┐ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд▓реЙрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬреЛ xpc_ktrace_pid0
рдФрд░ xpc_ktrace_pid1
рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИрдВред рдЬреЛ рдХреЛрдб рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдЗрдиреНрд╣реЗрдВ /usr/share/misc/trace.codes
рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрдирдХреЗ рдкрд╛рд╕ 0x29
рдЙрдкрд╕рд░реНрдЧ рд╣реИ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИ 0x29000004
: XPC_serializer_pack
ред
рдЙрдкрдХрд░рдг xpcproxy
рдЙрдкрд╕рд░реНрдЧ 0x22
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: 0x2200001c: xpcproxy:will_do_preexec
ред
XPC рдЗрд╡реЗрдВрдЯ рд╕рдВрджреЗрд╢
рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рднрд┐рдиреНрди рдЗрд╡реЗрдВрдЯ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдРрд╕реЗ рдЗрд╡реЗрдВрдЯ рд╣реЛрдиреЗ рдкрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрдЕрдк launchd plist рдлрд╛рдЗрд▓реЛрдВ
рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкрд┐рдЫрд▓реА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд LaunchEvent
рдХреБрдВрдЬреА рд╣реЛрддреА рд╣реИред
XPC рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд╛рдВрдЪ
рдЬрдм рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ XPC рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реИ, рддреЛ XPC рд╕реЗрд╡рд╛ рдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп pitfalls рд╣реИрдВ:
macOS XPC Connecting Process CheckXPC рдкреНрд░рд╛рдзрд┐рдХрд░рдг
Apple рдРрдкреНрд╕ рдХреЛ рдХреБрдЫ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ рдпреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ XPC рд╕реЗрд╡рд╛ рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдЧреА:
macOS XPC AuthorizationXPC рд╕реНрдирд┐рдлрд░
XPC рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕реНрдирд┐рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк xpcspy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ Frida рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдХрд░рдг рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ XPoCe2.
XPC рд╕рдВрдЪрд╛рд░ C рдХреЛрдб рдЙрджрд╛рд╣рд░рдг
XPC рд╕рдВрдЪрд╛рд░ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреЛрдб рдЙрджрд╛рд╣рд░рдг
рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ Dylb рдХреЛрдб рдХреЗ рдЕрдВрджрд░
Remote XPC
рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ RemoteXPC.framework
(рдЬреЛ libxpc
рд╕реЗ рд╣реИ) рд╡рд┐рднрд┐рдиреНрди рд╣реЛрд╕реНрдЯреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ XPC рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
рдЬреЛ рд╕реЗрд╡рд╛рдПрдБ рджреВрд░рд╕реНрде XPC рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИрдВ, рдЙрдирдХреЗ plist рдореЗрдВ рдХреБрдВрдЬреА UsesRemoteXPC рд╣реЛрдЧреА рдЬреИрд╕реЗ рдХрд┐ /System/Library/LaunchDaemons/com.apple.SubmitDiagInfo.plist
рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕реЗрд╡рд╛ launchd
рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рд╣реЛрдЧреА, рдпрд╣ UserEventAgent
рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ com.apple.remoted.plugin
рдФрд░ com.apple.remoteservicediscovery.events.plugin
рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, RemoteServiceDiscovery.framework
com.apple.remoted.plugin
рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ get_device
, get_unique_device
, connect
...
рдПрдХ рдмрд╛рд░ рдЬрдм рдХрдиреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реЗрд╡рд╛ рдХрд╛ рд╕реЙрдХреЗрдЯ fd
рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ remote_xpc_connection_*
рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдпрд╣ CLI рдЯреВрд▓ /usr/libexec/remotectl
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреВрд░рд╕реНрде рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
BridgeOS рдФрд░ рд╣реЛрд╕реНрдЯ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдПрдХ рд╕рдорд░реНрдкрд┐рдд IPv6 рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред MultiverseSupport.framework
рд╕реЙрдХреЗрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ fd
рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрди рд╕рдВрдЪрд╛рд░реЛрдВ рдХреЛ netstat
, nettop
рдпрд╛ рдУрдкрди-рд╕реЛрд░реНрд╕ рд╡рд┐рдХрд▓реНрдк netbottom
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Last updated