在ios开发中,可以使用GDataXML生成xml
GDataXML只有两个文件GDataXMLNode.h和GDataXMLNode.m。使用方法如下:
将文件包含进工程后,添加libxml2.dylib:
现在可以编写代码了:
#import"GDataXMLNode.h"
// 创建一个根标签
GDataXMLElement *rootElement = [GDataXMLNode elementWithName:@"root"];
// 创建一个属性
GDataXMLElement *attribute = [GDataXMLNode attributeWithName:@"a" stringValue:@"b"];
// 创建一个标签元素
GDataXMLElement *element = [GDataXMLNode elementWithName:@"user" stringValue:@"HelloWorld"];
// 把标签与属性添加到根标签中
[rootElement addAttribute:attribute];
[rootElement addChild:element];
// 生成xml文件内容
GDataXMLDocument *xmlDoc = [[GDataXMLDocument alloc] initWithRootElement:rootElement];
NSData *data1 = [xmlDoc XMLData];
NSString *xmlString = [[NSString alloc] initWithData:data1 encoding:NSWindowsCP1253StringEncoding];
NSLog(@"xmlString %@", xmlString);
结果:
<?xml version="1.0"?>
<root a="b"><user>HelloWorld</user></root>
⑵ iOS寮鍙戠敓鎴恡xt鏂囦欢
涓寮濮嬫垜鐢ㄧ殑鏂规硶涓鍐欙紝浣嗘槸鍚庢潵鍙戠幇鍦ㄩ珮绯荤粺涓婃姤閿欙紙澶ф傛姤閿欏唴瀹癸細NSCocoaErrorDomain锛257锛夈
鍚庢潵瑙e喅浜嗭紝鍋氫釜璁板綍銆
1銆佸湪浣庝簬iOS13鐨勭郴缁熶腑銆傜敤鍒涘缓鏂囦欢澶圭殑褰㈠紡鍙浠ュ備笅锛
+ (NSString *)tmpLogPath
{
NSString *docPath = [NSHomeDirectory() :@"Library"];
NSString *dirPath = [docPath :@"mylog"];
NSString *filePath = [dirPath :@"tmpLog.txt"];
return filePath;
}
+ (void)writeTmpLog:(NSString *)aMsg
{
NSString *filePath = [[self class] tmpLogPath];
if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
BOOL isDir = NO;
BOOL hasDir = [[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:&isDir];
if (!hasDir || !isDir) {
[[NSFileManager defaultManager] createDirectoryAtPath:filePath withIntermediateDirectories:NO attributes:nil error:nil];
}
}
NSError *error;
NSString *content =[NSString stringWithContentsOfFile:filePath
encoding:NSUTF8StringEncoding
error:&error];
NSString *newContent = [NSString stringWithFormat:@"%@\n%@",content,aMsg];
[newContent writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
+ (void)clearTmpLog
{
NSString *filePath = [[self class] tmpLogPath];
[@"" writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
2銆佷絾鏄鍦╥OS13涓婏紝涓嶈兘杩欐牱鍐欍傜郴缁熶細榛樿ゅ垱寤轰互涓***.txt鐨勬枃浠跺す锛屽湪鍐欏叆鐨勬椂鍊欏氨鍑洪棶棰樹簡銆
浼氭姤閿欙細NSCocoaErrorDomain锛257 灏辨槸
NSFileReadNoPermissionError = 257,/ /璇诲彇閿欒(鏉冮檺闂棰)
鎵浠ュ彲浠ヨ繖鏍峰啓锛
+ (NSString *)tmpLogPath {
NSString *documentPath = [(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [documentPath :@"mylog/tmpLog.txt"];
returnfilePath;
}
+ (void)writeTmpLog:(NSString*)aMsg {
NSString*fieldPath = [[self class]tmpLogPath];
NSLog(@"褰撳墠鏂囦欢澶у皬锛%llu",[self fileSizeWithPath:fieldPath]);
NSFileManager *manager = [NSFileManager defaultManager];
if(![managerfileExistsAtPath:fieldPath]){
NSError*error;
[aMsgwriteToFile:fieldPath atomically:YES encoding:NSUTF8StringEncoding error:&error];
if(error) {
NSLog(@"鍐欏叆澶辫触:%@\n",[error localizedDescription]);
}
}else{
NSError*error;
NSError*writeError;
NSString *content =[NSString stringWithContentsOfFile:fieldPath
encoding:NSUTF8StringEncoding
error:&error];
if(error) {
NSLog(@"璇诲彇澶辫触:%@\n",[error localizedDescription]);
}
NSString*newContent = [NSString stringWithFormat:@"%@\n%@",content,aMsg];
[newContentwriteToFile:fieldPath atomically:YES encoding:NSUTF8StringEncoding error:&writeError];
if(writeError) {
NSLog(@"鍐欏叆澶辫触:%@\n",[]);
}
}
}
//鑾峰彇鏂囦欢澶у皬
+ (unsignedlonglong)fileSizeWithPath:(NSString*)path {
signedlonglongfileSize =0;
NSFileManager *fileManager = [NSFileManager defaultManager];
if([fileManagerfileExistsAtPath:path]) {
NSError*error =nil;
NSDictionary*fileDict = [:patherror:&error];
if(!error && fileDict) {
fileSize = [fileDictfileSize];
}
}
returnfileSize;
}
+ (void)clearTmpLog {
NSError*error;
NSFileManager *manager = [NSFileManager defaultManager];
NSString*filePath = [[selfclass]tmpLogPath];
[managerremoveItemAtPath:filePatherror:&error];
if(error) {
NSLog(@"鍒犻櫎澶辫触:%@\n",[error localizedDescription]);
}
}
⑶ iOS MDM璇﹁В锛3锛夆 鐢熸垚mobileconfig閰嶇疆鏂囦欢鍙婄惧悕
姣斿傦細
鍒朵綔涓涓閰嶇疆鏂囦欢鍙浠 iPhone閰嶇疆浣跨敤宸ュ叿 鍜 鎵嬪啓XML鏂囦欢 涓ょ嶆柟寮忋備负浜嗘柟渚挎搷浣滄垜鐢ㄤ簡鍓嶈咃紙缃戜笂璇磋繖涓宸茶鑻规灉鎶涘純锛屽ソ鍍忎笉褰卞搷鏂囦欢鐢熸垚锛夈
鎵撳紑鏂囦欢鈥斺旀柊寤洪厤缃鏂囦欢锛屼富瑕佹秹鍙婁娇鐢ㄥ埌鐨勯厤缃濡備笅锛
鑷虫ら厤缃璁剧疆鍩烘湰瀹屾垚锛屼繚瀛樸佸煎嚭浼氭彁绀虹粰閰嶇疆鏂囦欢绛惧悕锛岄夋嫨鏃犲嵆鍙銆
鎴戜滑鍙浠ョ洿鎺ヤ慨鏀规XML鏂囦欢锛屾嵁姝 Configuration Profile Reference 鍙娣诲姞鍏朵粬鎵闇鐨勫瓧娈点備綘涔熷彲浠ュ湪姝ゅ熀纭涓婁慨鏀归傚悎涓鸿嚜宸辩殑锛堜及璁″緢瀹规槗閬楁紡鎴栧嚭閿欙級锛屾垜杩樻槸鍠滄㈠湪 iPhone閰嶇疆浣跨敤宸ュ叿 涓鎿嶄綔姣旇緝鏂逛究銆
浠ヤ笂鐢熸垚鐨勯厤缃鏂囦欢鍏跺疄鍙浠ョ洿鎺ュ畨瑁呭埌璁惧囦笂锛屽傛灉瀹夎呮垚鍔熷悗浼氭湁涓涓绾㈣壊鐨勬彁绀衡樻湭绛惧悕鈥欏備笅銆
绛惧悕瑕佺粡鍘嗕袱涓鎿嶄綔锛屼竴銆丮DM Sever绔绛惧悕銆備簩銆佺敤鑻规灉棰佸彂鐨勮瘉涔︾惧悕銆
闇瑕佷互涓嬭瘉涔︽枃浠讹細
鍙浠ュ啀缁堢涓鎵ц岋細 openssl smime -sign -in unsigned.mobileconfig -out signed.mobileconfig -signer server.crt -inkey server.key -certfile cert-chain.crt -outform der -nodetach
(浠ヤ笂鏄疛ava鍚庡彴绛惧悕鐨勬搷浣滆繃绋嬶紝鎴戞病鏈夐獙璇侊紝鍦ㄦや綔涓轰竴涓鎿嶄綔姝ラゆ荤粨鏀惧湪杩欓噷)銆
鎴戠寽娴婱DM Sever鐨勭惧悕鍙鏄涓轰簡鍜屽㈡埛绔杩涜屼笅璁よ瘉鍜屽规弿杩版枃浠剁殑鍔犲瘑杩囩▼锛屽彧鏄璁╄繖涓や釜涔嬮棿鐩镐簰璁ょ煡瀵规柟锛屽拰iOS绯荤粺鏄鍚︽壙璁ゆ棤鍏炽傛墍浠ヤ互涓婃搷浣滀箣鍚庤繕浼氭彁绀衡樻湭绛惧悕鈥欍傦紙瀹為檯娴嬭瘯涓杩欎釜鎿嶄綔鍙浠ョ渷鐣ワ級銆
浠ヤ笅鎿嶄綔寮曡嚜缃戠粶
杩欎釜鎿嶄綔鏈夊嚑绉嶆柟娉曞彲渚涢夋嫨锛岃繖閲屾垜浣跨敤浜嗚剼鏈绛惧悕銆
鍊熷姪浜庡己澶х殑github,鎵惧埌浜嗕竴涓 python鑴氭湰 杩涜岀惧悕
1.绛惧悕涓涓猰obileconfig
profile_signer.py涓 mobileconfig 鏀惧湪鍚屼竴鐩褰,缁堢杩涘叆鐩褰曟墽琛
./profile_signer.py -n "3rd Party Mac Developer Application" sign AcrobatPro.mobileconfig AcrobatProSigned.mobileconfig
2.鍔犲瘑涓涓猰obileconfig
./profile_signer.py -n "3rd Party Mac Developer Application" encrypt AcrobatPro.mobileconfig AcrobatProEnc.mobileconfig
3.绛惧悕骞朵笖鍔犲瘑涓涓猰obileconfig
./profile_signer.py -n "3rd Party Mac Developer Application" both AcrobatPro.mobileconfig AcrobatProBoth.mobileconfig
"3rd Party Mac Developer Application"涓轰綘鐨勮瘉涔﹀湪閽ュ寵涓蹭腑鐨勫叏鍚,閫夋嫨璇佷功=>鏄剧ず绠浠=>澶嶅埗甯哥敤鍚嶇О鍔犱笂寮曞彿鍗冲彲,姣斿
"iPhone Developer: jakey.shao [email protected] "
"iPhone Distribution: Skyfox Network Technology Co., Ltd."
66911171-EE9C-4DB7-BFCE-6564CC1B4E1A濡傛灉鑳芥g‘璇诲彇鍒拌瘉涔︼紝浼氭彁绀哄厑璁歌块棶閽ュ寵涓诧紝鐐瑰嚮鍏佽稿嵆鍙锛
鏈缁堝畨瑁呮彁绀哄凡楠岃瘉鍟︺
⑷ ios 真机测试生成的文件夹怎么什么地方
1、授权设备:
进入Apple Developer会员中心,点击图中的iOS Provisioning Portal,进入开发者授权设置系统:
在设置界面中,可以选择点击页面下方的助手来运行向导:
点击左侧导航的Device,进入授权设备的页面,点击右上方的Add Device按钮可以添加一个设备:
添加设备的时候可以指定设备的名字(随便写),以及设备的UDID。每一个Apple的设备都有一个唯一的标识符,获得这个标识符的方法很简单,有两种方式:
(1)将你的设备连接到电脑,然后在iTunes里找到你的设备信息(如下图),点击图中红色方框的位置,设备UDID就会显示出来。右击UDID会提示拷贝,将拷贝的结果复制到框内即可;
(2)打开xcode,window→organizer→devices,在里面可以看到identifier信息
2、添加App ID:
点击左侧导航的App IDs按钮可以进入应用程序ID的配置页面,可以点击页面右方的New App ID按钮添加一个新的应用。这个ID对应的是即将开发和测试的应用程序。如下图,在description里添加一个单一应用的名称(不支持特殊字符),然后在最下面的Bundle Seed ID里面填入一个含有domain格式的字符串(如com.bo.test)。Bundle Seed ID是一个集合了开发商与应用程序的信息,格式为(com.[开发商].[应用]),这里可以指定为单一应用,也可以指定为全部应用。如果是单一应用,建议刚才填写的description与Bundle Seed ID的最后一项相同(如test和com.bo.test),如果是全部应用,可以使用这样的Bundle Seed ID: com.bo.
3、添加证书:
(1)首先在mac电脑上生成开发者证书:
在Applications->Utilities里手动打开Keychain Access。按照下图操作最终点击“从证书颁发机构请求证书”
正确填写自己的邮箱和姓名即可,选择“存储到磁盘”,点击继续。最终会生成一个名为“CertificateSigningRequest.certSigningRequest”的文件。
这时候返回刚才的iOS Provisioning Portal网页界面,点击左侧的“Certificate”,点击页面右方的Request Certificate申请一个证书,然后点击页面下方的按钮上传生成的certSigningRequest文件,这样就完成了证书的申请流程。申请成功后,Certificate页面里就有了一条证书,刷新几次页面后证书的状态就变成Issued,点击download按钮可以下载一个cer文件。
4、使用开发者授权:
(1)回到iOS Provisioning Portal网页界面,点击左侧的“provisioning”,点击右侧的New Profile按钮创建一个新的授权文件:
填写profile Name;在Certificates中选择刚刚创建好的证书(一劳永逸的一步,之后只需勾选该证书即可,不必再手动添加);APP ID选择刚刚建的那个;Devices 选择刚刚添加的设备;Submit(绑定设备到应用程序);刷新页面,会看到刚刚建的那个后边有个Download,点击Download,下载了一个.mobileprovision文件。
(2)打开xcode→window→organizer,将下载的.mobileprovision文件拖到Provisioning中(此步骤绑定设备到应用程序,并生成证书)
(3)项目中的plist 文件,将Bundle Identifier 这一项的内容改成Bundle Seed ID(格式:com.[开发商].[应用])即可
将run按钮右边的设备选为对应的真机设备,接下来就编译运行看看吧!