MacOS XPC的使用入门

article/2025/9/23 10:49:45

MacOS:10.14,Xcode:11.0


1、随意创建一个工程,可以是App project
Xcode -> File -> New -> Project... -> macOS -> Application -> App -> click Next
填写Product Name(XPCDemo) -> 选择或者不选择Team账号 -> click Next -> click create, 创建一个工程


2、创建xpc service

选中project -> 显示targets栏 -> 点击"+"号



选择macOS -> 筛选框中输入xpc -> 选择XPC Service -> click Next


填写Product Name -> 设置 Bundle Identifer -> click Finish完成创建
 
 


3、检查和设置
创建完成后,检查下TARGETS -> XPCDemo -> Build Phases中,有增加一项 Embed XPC Services
这个功能现在在我的Xcode 11.0是自动添加的,但很早以前的版本好像还要自己添加才行


检查或设置xpc的bundle identifer,在调用xpc时使用

 


4、文件说明:
XPC 创建后,在工程中会生成4个文件,


XPCServiceProtocol.h声明一些函数,

// XPCServiceProtocol.h文件
#import <Foundation/Foundation.h>@protocol XPCServiceProtocol
- (void)upperCaseString:(NSString *)aString withReply:(void (^)(NSString *))reply;    
@end

XPCService.h声明继承了协议,

// XPCService.h文件
#import <Foundation/Foundation.h>
#import "XPCServiceProtocol.h"
@interface XPCService : NSObject <XPCServiceProtocol>
@end

XPCService.m中实现这些协议方法

// XPCService.m文件
#import "XPCService.h"@implementation XPCService
// XPCServiceProtocol.h中声明的方法的实现
- (void)upperCaseString:(NSString *)aString withReply:(void (^)(NSString *))reply {NSString *response = [aString uppercaseString];reply(response);
}@end

这个函数是xcode自动生成的示例代码,可直接用来测试。在main.m文件中也有很多代码,都是自动生成的,暂且不管
调用XPC的时候,调用Protocol中声明的方法,Protocol是内外使用方法的桥梁

 


5、XPC启动和方法调用
在XPCServiceProtocol.h中也给出了如何使用xpc的一个示例代码
示例中给出了建立连接、运行方法、清除连接的方法

/*To use the service from an application or other process, use NSXPCConnection to establish a connection to the service by doing something like this:_connectionToService = [[NSXPCConnection alloc] initWithServiceName:@"com.company.XPCService"];_connectionToService.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(XPCServiceProtocol)];[_connectionToService resume];Once you have a connection to the service, you can use it like this:[[_connectionToService remoteObjectProxy] upperCaseString:@"hello" withReply:^(NSString *aString) {// We have received a response. Update our text field, but do it on the main thread.NSLog(@"Result string was: %@", aString);}];And, when you are finished with the service, clean up the connection like this:[_connectionToService invalidate];
*/

storyboard -> View Controller Scene -> 添加button -> ctrl+鼠标,将button在ViewController中建立个action连接
ViewController.h中引入头文件:

// ViewController.h文件
#import <Cocoa/Cocoa.h>
#import "XPCServiceProtocol.h"
#import "XPCService.h"
@interface ViewController : NSViewController@end

ViewController.m文件内容:

// ViewController.m文件
#import "ViewController.h"
@interface ViewController(){NSXPCConnection *_connectionToService; //私有变量
}
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];//建立xpc连接并启动_connectionToService = [[NSXPCConnection alloc] initWithServiceName:@"com.company.XPCService"];_connectionToService.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(XPCServiceProtocol)];[_connectionToService resume];
}- (void)setRepresentedObject:(id)representedObject {[super setRepresentedObject:representedObject];// Update the view, if already loaded.
}
- (IBAction)XPCTest:(id)sender {// XPC中运行方法[[_connectionToService remoteObjectProxy] upperCaseString:@"hello" withReply:^(NSString *aString) {NSLog(@"Result string was: %@", aString);}];
}
@end

执行结果(XPC执行方法upperCaseString,输出结果):

 
 


github XPCDemo:https://github.com/auspark/XPCDemo


Apple Documentation:

Apple XPC
Creating XPC Services
Efficient Design with XPC Videos
Kernel and Device Drivers Layer


http://chatgpt.dhexx.cn/article/hQX2iWd4.shtml

相关文章

关于 XPC

关于 XPC XPC 是 OS X 下的一种 IPC (进程间通信) 技术, 它实现了权限隔离, 使得 App Sandbox 更加完备. 首先&#xff0c;XPC 更多关注的是实现功能某种的方式&#xff0c;通常采用其他方式同样能够实现。并没有强调如果不使用 XPC&#xff0c;无法实现某些功能。 XPC 目的是提…

用虚拟机在一台电脑上实现xPC实时仿真

背景介绍 一般的xPC仿真需要2台电脑来分别实现目标机和宿主机&#xff0c;两者之间通过以太网或者串口实现通讯。Matlab的xPC Target提供了一个运行在目标机上的高度剪裁的实时操作内核&#xff0c;无需在目标机上面安装任何的操作系统&#xff0c;只需要包含实时内核的启动盘启…

使用XPC与X-Plane9进行通信

XPC(X-Plane Connect)是NASA开源的项目 XPC下载地址 XPC支持C,JAVA,PYTHON和MATLAB 博主使用的是XPC中matlab与X-Plane9进行通信&#xff0c;具体步骤如下 1.把 .XPlaneConnect-master/xpcPlugin 下的 XPlaneConnect 文件夹整体拷贝到游戏目录下 .X-Plane 9\Resources\plugi…

XPC论文总结

XPC: Architectural Support for Secure and Efficient Cross Process Call 论文总结 摘要 1.微内核有很多有趣的特性&#xff0c;例如安全性、容错、模块化、可定制性。 2.IPC是影响操作系统性能的主要因素。 3.IPC在例如Android Linux等单片内核中也发挥着重要作用&#xf…

ios进程间通信问题之二----XPC

原文地址&#xff1a;http://objccn.io/issue-14-4/ 关于 XPC XPC 是 OS X 下的一种 IPC (进程间通信) 技术, 它实现了权限隔离, 使得 App Sandbox 更加完备. 首先&#xff0c;XPC 更多关注的是实现功能某种的方式&#xff0c;通常采用其他方式同样能够实现。并没有强调如果不使…

c语言编程输出杨辉三角行

#include <stdio.h> #define N 7 //以7行7列为例 int main() { int a[N][N]; //N行N列的杨辉三角 int i,j;for(i0;i<N;i) //先赋值两边 { a[i][0]1; a[i][i]1; }for(i2;i<N;i) // 计算中间的数值 { for(j1;j<i;j) a[i][j]a[i-1][j-1]a[i-1][j]; }for(i0;i<…

C语言笔记--利用二维数组输出杨辉三角形

杨辉三角形又称帕斯卡三角形&#xff0c;其余的话就不多说&#xff0c;先看下面的三角形&#xff1a; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 …

c语言——杨辉三角(输出任意行数的杨辉三角)

下面为大家介绍用二维数组来输出任意行的杨辉三角。有以下步骤&#xff1a; 1&#xff1a;利用一个全局变量来控制数组&#xff0c;从而控制杨辉三角大小。 2&#xff1a;分别用for循环进行对杨辉三角进行赋值。&#xff08;利用它每个数等于它上方两个数和的规律&#xff09; …

C语言打印输出杨辉三角案例讲解

我们先看什么是杨辉三角&#xff1a; 通过观察我们得出杨辉三角的特点&#xff1a; 1.杨辉三角的每行第一个数字都是1。 2.杨辉三角的每行最后一个数字都是1。 3.杨辉三角从第三行开始&#xff0c;每行除了第一个数字和最后一个数字都是1外&#xff1b; 其余的数字都是每个数字…

输入n,输出n行的杨辉三角.

杨辉三角&#xff1a;每个数等于它上方两数之和。 #include<stdio.h> int main() {int n;scanf("%d",&n);int a[100][100]{0};int i,j;for(i0;i<n;i){a[i][0]1;}for(i1;i<n;i){for(j1;j<i;j){a[i][j]a[i-1][j]a[i-1][j-1];}}for(i0;i<n;i){for…

C语言之输出杨辉三角的教程

题目&#xff1a;产生并输出杨辉三角的前七行 代码如下所示&#xff1a; #include <stdio.h>main(){int a[7][7];int i, j;for (i 0; i < 7; i){a[i][0] 1;a[i][i] 1;}for (i 2; i < 7; i)//关于行的循环{for (j 1; j <i; j)//关于列的循环&#xff0c;每…

c语言实现输出杨辉三角

杨辉三角 方法1:方法2:方法3: 要求&#xff1a; 输出以下的杨辉三角形&#xff08;要求输出10行&#xff09;&#xff08;12分&#xff09; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10  5 1 : : : : : : 方法1: #include<stdio.h>#define row 10 #defin…

[C语言]杨辉三角形:编程计算并输出打印前n行杨辉三角形。请使用数组实现。

输入 输入一个正整数n&#xff08;0 < n < 20&#xff09;。 输出 输出杨辉三角形的前n行&#xff0c;相邻两项之间用一个空格隔开。 输入示例 7 输出示例 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 数据范围 输入输出均为int范围的整数 先…

C语言输出正三角形

输出这个正三角形 分析&#xff1a;行数为五行&#xff0c;然后确定每行需要输出的空格数和*号数即可 int i, j, k;for(i 1; i<5; i){/* 观察每行的空格数量 */for(j 0 ;j < 4-i ;j) {printf(" "); //输出空格}/* 观察每行*号的数量 */for(k 0; k <…

用C语言打印杨辉三角(可以根据输入的行数输出相应的杨辉三角)

C语言实现打印杨辉三角 杨辉三角如下图所示&#xff1a; 从图中可以看出杨辉三角中的数据有以下特点&#xff1a; 1.第0列及对角线上的所有元素都为1 2.其它位置的元素为上一行与该元素同列及前一列的元素相加的结果 根据上述杨辉三角中数据的特点&#xff0c;我们可以编程实…

C语言:输出杨辉三角

C语言学习记录之输出杨辉三角形 #include <stdio.h> #define N 10 //输出前十行 int main() {int arr[N][N];for (int i 0;i < N;i) { arr[i][0] 1; // 首先给每行第一个和最后一个赋值1arr[i][i] 1;}// 从第三行起&#xff0c;除了每行的1以外&#xff0c…

C++语言 输出杨辉三角形 要求输出10行。

C语言 输出杨辉三角形 要求输出10行。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 #include <iostream> #include <iomanip> using namespace std; int main(){const int n11;int i,j,a[n][n];for (i1;i<n;i){a[i][i]1;a[i][1]1;}for (…

【输出N行杨辉三角形】两种输出方式(直角三角形型和等腰三角形型)C语言

要想用C语言实现杨辉三角形的输出&#xff0c;就首先需要明白杨辉三角形是怎么来的。 首先我们规定每一行第一个和最后数一个为1&#xff0c;那么从第一行开始就只有一个1;第二行就有两个1&#xff0c;从第三行开始就体现出杨辉三角形的特点了&#xff0c;即就是——每一个等于…

输出以下的杨辉三角形 要求输出10行 C语言

C语言 输出杨辉三角形 要求输出10行。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 c程序设计(第四版) #include <stdio.h> #define N 10 int main() { int i,j,a[N][N];for (i0;i<N;i){a[i][i]1;a[i][0]1;}for (i2;i<N;i)for (j1;j<i-…

C语言输出杨辉三角形

C语言输出杨辉三角形 IDE&#xff1a;DEV-C 编程思想&#xff1a; 利用一维数组存储第0行数据。 例如 int Sum[ ] { 0,0,0,0,1,0,0,0,0}; 元素1表示初始时最中心元素。其位置由所想要输出的行数控制。 然后利用for循环求下一行数组元素值。具体做法如下&#xff1a; for(int …