在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按鈕右邊的設備選為對應的真機設備,接下來就編譯運行看看吧!