1

NSStringジェイルブレイクされた iOS デバイス用の微調整を書いています。この「bundleID」とコードで作成された整数を plist ファイルに書き込めるようにしたいと考えています。以下のコードはこれを行うことができますが、これを行うのは 1 回だけであり、plist に複数回書き込むことはできません。bundleID が変更され、plist にも書き込まれる必要があるため、これを行いたいと考えています。基本的に私がやりたいことは、アプリが起動されたときに、そのアプリのバンドル ID (com.apple.mobilesafari) が plist のキーとして書き込まれることです。次に、アプリが開かれるたびに値に 1 を追加するコードを作成します。たとえば、モバイル サファリを 4 回開いた場合、plist は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"          "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.mobilesafari</key>
    <integer>4</integer>
    <key>customText</key>
    <false/>
    <key>enabled</key>
    <false/>
</dict>
</plist>

ただし、モバイルサファリを4回起動すると、そのままになります...

<key>com.apple.mobilesafari</key> <integer>1</integer>

また、アプリごとに bundleID を保存することも必要です。したがって、サファリを開いてから連絡先を開くと、plistに両方が必要になります。例えば...

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.mobilesafari</key>
    <integer>1</integer>
    <key>customText</key>
    <false/>
    <key>enabled</key>
    <false/>
</dict>
<dict>
    <key>com.apple.contacts</key>
    <integer>1</integer>
    <key>customText</key>
    <false/>
    <key>enabled</key>
    <false/>
</dict>
</plist>

これが私のobjective-cコードです...

%hook SBApplicationIcon
-(void)launch
{
// Return original method
        %orig;

// Get Bundle ID
    NSString* bundleID = [self leafIdentifier];

// Print that badboy!
    NSLog(@"Bundle ID: %@ ",bundleID);


// Set up plist
NSMutableDictionary *launches = [[NSMutableDictionary alloc]     initWithContentsOfFile:@"/var/mobile/Library/Preferences/com.bengerard.ipslider.plist"];

// Check plist exists
NSString *pathToFile = @"/var/mobile/Library/Preferences/com.bengerard.apppop.plist";
BOOL isFile = [[NSFileManager defaultManager] fileExistsAtPath:pathToFile isDirectory:NO];

 if(isFile)
{
// Counting
    int count = [[launches objectForKey:bundleID] intValue];
    count++;



// Write number of launches to plist
    [launches setObject:[NSNumber numberWithInt:count] forKey:bundleID];
//[launches insertObject:[NSNumber numberWithInt:count] forKey:bundleID];
    [launches writeToFile:@"/var/mobile/Library/Preferences/com.bengerard.apppop.plist" atomically:YES];

}
else {
//The file doesn't exit. 
}
// [bundleID release];
// [pathToFile release];
// [launches release];

}
%end

PS: DHowett の theos も使用して、微調整をコンパイルしています。

編集: 2 つの plist が異なることに気付きました。おそらく私の問題を引き起こしています。後でテストします

4

0 に答える 0