จะค้นหาไฟล์ realm ของฉันได้อย่างไร


239

ฉันสร้างฐานข้อมูลโดย realm แล้วและฉันไม่สามารถค้นหาไฟล์ดังกล่าวเป็น OS ของฉัน (โยเซมิตี) ไม่มีโฟลเดอร์มือถือใน / private / var / mobile

ฉันจะเข้าถึงอาณาจักรของฉันเพื่อเรียกใช้ในเบราว์เซอร์ได้อย่างไร

ข้ามการโพสต์จากกลุ่ม google


ตรวจสอบนี้ออก วิธีนี้ใช้ได้กับทั้งอุปกรณ์ที่รูทและที่ไม่ได้รูท
krhitesh

คำตอบ:


474

การค้นหาไฟล์ Realm

สำหรับ Android

จะดูไฟล์ Realm ของฉันใน Realm Browser ได้อย่างไร

สำหรับ iOS

หากแอพของคุณอยู่ในอุปกรณ์

ตรวจสอบให้แน่ใจว่าอุปกรณ์ของคุณเชื่อมต่ออยู่และไปที่หน้าต่างอุปกรณ์ในหน้าต่างเมนู Xcode หน้าต่าง> อุปกรณ์ (⌘⇧2) ที่นั่นคุณจะสามารถเลือกอุปกรณ์และแอพของคุณจากรายการแอพที่ติดตั้งพร้อมการอนุญาตการดีบัก

หลังจากที่เลือกแอปของคุณไปที่ฟันเฟืองในแถบเครื่องมือที่ด้านล่างของมุมมองตารางและเลือก“ดาวน์โหลดคอนเทนเนอร์ ...” คุณจะสามารถดึงไฟล์จากตำแหน่งเอกสารไปยัง Mac ของคุณได้ มันจะถูกบันทึกเป็นชุด xcappdata

เมื่อคุณเปิดพา ธ โลคัลใน Finder ซึ่งคุณบันทึกไว้คุณสามารถแตะที่นั้นโดยเลือก“ แสดงเนื้อหาแพ็คเกจ”ในเมนูบริบทของ Finder เมื่อคุณเลือกไฟล์ หน้าต่างตัวค้นหาใหม่จะเปิดขึ้นซึ่งคุณจะพบอาณาจักรของคุณในเส้นทางต่อไปนี้ (เช่น): AppData / Documents / default.realm (ไดเรกทอรี '/ private / var / mobile' เป็นเส้นทางซึ่ง iOS ใช้บน ระบบไฟล์ของอุปกรณ์

หากแอพของคุณอยู่ใน Simulator

ไปที่ไดเรกทอรีของผู้ใช้ของคุณ:

/Users/<username>/Library/Developer/CoreSimulator/Devices/<simulator-uuid>/data/Containers/Data/Application/<application-uuid>/Documents/default.realm

อาจเป็นวิธีที่ง่ายที่สุดในการรับเส้นทางปัจจุบันของขอบเขตเริ่มต้นคือหยุดการจำลองและหยุดการทำงานต่อไปนี้ลงในคอนโซล LLDB:

วัตถุประสงค์ -C :
(lldb) po [RLMRealmConfiguration defaultConfiguration].fileURL

Swift โดยใช้ขอบเขต Realm-C :
(lldb) po RLMRealmConfiguration.defaultConfiguration().fileURL

Swift โดยใช้ Realm Swift :
(lldb) po Realm.Configuration.defaultConfiguration.fileURL

หรือหากคุณมีRLMRealmอินสแตนซ์ในมือคุณสามารถใช้:
(lldb) po myRealm.configuration.fileURL

จากนั้นเพียงคัดลอกพา ธ นี้เปิดเทอร์มินัลแล้วพิมพ์open [วางเส้นทางที่นี่]

หมายเหตุ:บางพา ธ มีช่องว่างในนั้นโปรดใช้ "\" ก่อนช่องว่างเพื่อหลีกเลี่ยง

เครื่องมือผู้ช่วย SimPellers

นี่อาจเป็นวิธีที่เร็วที่สุดในการค้นหาไฟล์ของแอพในเครื่องจำลอง ติดตั้งSimPholders สิ่งนี้จะช่วยให้คุณเข้าถึงไดเรกทอรีเอกสารของแอปโดยตรงจากแถบเมนูของคุณ

หมายเหตุบางคนได้กล่าวว่า SimPholders ได้นำพวกเขาไปยังโฟลเดอร์แอพจำลองที่ไม่ถูกต้องหากเป็นกรณีของคุณให้พิมพ์เส้นทางของอาณาจักรโดยทำตามขั้นตอนข้างต้นพิมพ์ realm.path ของคุณ


1
หลังจากที่การปรับปรุงล่าสุดมีข้อผิดพลาดเมื่อ u po RLMRealm.defaultRealmPath()ทำ มันบอกว่าcalled object type 'NSString *' is not a function or function pointer
carbonr

ฉันมีปัญหาเช่นเดียวกับ @carbonr ใครช่วยได้บ้าง
denislexic

2
เวอร์ชัน Objective-C ที่สูงกว่า 0.97 ใช้po [[RLMRealm defaultRealm]path]
AlexHsieh

5
ส่วนหนึ่งของคำตอบนี้ล้าสมัยแล้ว นี่คือวิธีล่าสุดในการค้นหาไฟล์ฐานข้อมูล realm ของคุณ (default.realm) โดยใช้ RealmSwift:Realm.Configuration.defaultConfiguration.fileURL
nodebase

1
ใช้วิธี RealmSwift ฉันได้รับต่อไปนี้:error: use of undeclared identifier 'Realm'
Simon Bengtsson

122

ฉันพบวิธีที่ง่ายที่สุดสำหรับ iOS / macOS (สำหรับ swift 3 Xcode 8.3)

override func viewDidLoad() {

   // for swift 2.0 Xcode 7
   print(Realm.Configuration.defaultConfiguration.fileURL!)
}

จากนั้นรหัส x จะเข้าสู่เส้นทางที่ถูกต้องตรวจสอบหน้าจอด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้เปิดFinderของคุณแล้วกด+ + G(คำสั่ง + shift + G) แล้ววางเส้นทางที่บันทึกไว้ในXcodeของคุณ


10
เส้นทางเลิกใช้แล้ว ใช้Realm.Configuration.defaultConfiguration.fileURLแทน
hewigovens

2
มันถูกเปลี่ยนเป็น Realm.configuration.fileURL
Reshad

3
สวิฟท์ 3, xcode8.3 ใช้ได้กับRealm.Configuration.defaultConfiguration.fileURL!
xmhafiz

ฉันทำตามกระบวนการเดียวกัน แต่ฉันไม่สามารถหาเส้นทางของไฟล์ในโปรแกรมค้นหาได้
RejoylinLokeshwaran

1
นี่คือที่สมบูรณ์แบบสำหรับการจำลองและเมื่อคุณพบไฟล์ของคุณมันเป็นเรื่องง่าย cmd-click ที่ "Open WIth" เพื่อเปิดไฟ Realm Studio สิ่งนี้ทำให้เกิดคำถามหรือความคิด: Realm Studio ต้องการตัวเลือกเมนู "เปิดล่าสุด" ไฟล์!
วาด ..

39

ทางเลือกง่ายๆสำหรับแอพ Simulator

สร้างสมาร์ทโฟลเดอร์ / ค้นหาใน Finder ให้การเข้าถึงไฟล์ realm ทั้งหมดของคุณอย่างรวดเร็วและง่ายดาย

  1. เปิดโฟลเดอร์/Users/$USER/Library/Developer/CoreSimulator/Devicesใน Finder

    ด้วยเทอร์มินัล open /Users/$USER/Library/Developer/CoreSimulator/Devices

  2. ค้นหา .realm

  3. เปลี่ยนการค้นหาเพื่อค้นหาใน"Devices"โฟลเดอร์เท่านั้น

  1. บันทึกการค้นหาลงในแถบด้านข้างของคุณ (เช่นขอบเขต)

เมื่อจัดเรียงตามวันที่สิ่งนี้จะทำให้คุณมีรายชื่อ.realmไฟล์จำลองที่ได้รับการแก้ไขล่าสุดอย่างรวดเร็วและง่ายดาย


ขอบคุณ @Archdoog - ไม่ใช่ความคิดที่ไม่ดีเมื่อคุณต้องผ่านโครงการใหม่ ๆ มากมายกับ Realm
Allen

4
บันทึกเป็นการค้นหาอัจฉริยะ! ขอบคุณ! :)
karlingen

22

นี่เป็นทางออกที่ง่าย .. ฉันยุ่งกับเรื่องนี้สักครู่ ฉันควรชี้ให้เห็นว่านี่เป็นชุดคำสั่งเฉพาะที่ใช้ Android Studio และ AVD Emulator

1) เริ่มต้นโปรแกรมจำลองและเรียกใช้แอปของคุณ

2) ขณะที่แอปยังทำงานอยู่ให้เปิดการตรวจสอบอุปกรณ์ Android (อยู่ในแถบเครื่องมือถัดจากไอคอนผู้จัดการ AVD และ SDK)

3) คลิกที่แท็บ File Explorer ใน Device Monitor ควรมีโฟลเดอร์จำนวนมาก

4) นำทางเส้นทางต่อไปนี้: ข้อมูล> ข้อมูล> ชื่อแพคเกจของคุณ > ไฟล์> Default.Realm (หรืออะไรก็ตามที่คุณตั้งชื่อ)

อดีต หากคุณกำลังใช้หนึ่งในโครงการตัวอย่างของ realm พา ธ จะเป็นเช่น Data> Data> io.realm.examples.realmgridview> files> default.realm

5) ไฮไลต์ไฟล์คลิกที่ไอคอนฟลอปปี้ดิสก์ในพื้นที่ด้านขวาบน "ดึงไฟล์จากอุปกรณ์"

6) บันทึกลงในทุกที่ที่คุณต้องการและทำ


18

สิ่งที่ฉันทำคือการใช้

let realm = Realm(path: "/Users/me/Desktop/TestRealm.realm")

จากนั้นมันจะถูกสร้างขึ้นในมุมมองแบบเต็มบนเดสก์ท็อปของฉันและฉันสามารถดับเบิลคลิกเพื่อเปิด Realm Browser บน ต่อมาฉันสามารถลบพารามิเตอร์และปล่อยให้มันใช้ตำแหน่งเริ่มต้นเมื่อฉันพึงพอใจว่าทุกอย่างทำงานตามที่คาดไว้


1
ฉันได้รับข้อผิดพลาดว่า "อาร์กิวเมนต์ป้ายกำกับ" (เส้นทาง :) 'ไม่ตรงกับการใช้งานเกินพิกัดใด ๆ " มีความคิดอะไรบ้าง
Marcelo Gracietti

นั่นมันช่างวิเศษจริงๆ!
WilomGfx

ยอดเยี่ยมสำหรับการทดสอบเครื่องมือจำลอง แต่อาจทำงานได้ไม่ถูกต้องบนอุปกรณ์จริง
ความผิดปกติ

ให้อาณาจักร = ลอง! อาณาจักร (fileURL: URL (สตริง: "/Users/ [/] เหมือนกัน / Desktop / TestRealm.realm")!)
แฮร์ริส

11

วัตถุประสงค์ -C - [RLMRealmConfiguration defaultConfiguration].fileURL

NSLog(@"%@",[RLMRealmConfiguration defaultConfiguration].fileURL);

Eg- / ผู้ใช้ / "ของคุณผู้ใช้ชื่อ" / Library / Developer / CoreSimulator / อุปกรณ์ / E58645FF-90DE-434D-B2EB-FA145EB6F2EA / ข้อมูล / บรรจุภัณฑ์ / ข้อมูล / แอพลิเคชัน / E427BD21-2CB1-4F64-9ADF-8742FF731209 / เอกสาร /

นี่เป็นคำสั่งที่ง่ายที่สุดที่คุณสามารถเรียกใช้เพื่อให้ได้พา ธ ของคุณไปยังไฟล์. realm คุณจะเห็นไฟล์. realm หลังจากการดำเนินการอ่านและเขียนทั้งหมดเสร็จสมบูรณ์

หรือ

คุณสามารถเปิดโอเพนซอร์ทางเลือกของซิมการ์ดเพื่อเข้าถึงไดเรกทอรีเอกสารของแอปโดยตรงจากแถบเมนูของคุณ


11

คำตอบข้างต้นไม่มีวิธีในการค้นหาไฟล์ realm ในแพลตฟอร์ม Android และเชื่อฉันด้วยวิธีนี้จะช่วยประหยัดเวลาของคุณได้มากซึ่งโดยทั่วไปเราเสียวิธีการอื่นในการรับไฟล์ realm เริ่มกันเลย ...

เปิด "Device File Explorer" เป็นครั้งแรกใน android studio (ดู -> เครื่องมือ Windows -> Device File Explorer

นี่จะเปิด explorer อุปกรณ์ของคุณ

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้เปิดข้อมูล -> data -> (your_app_package_name) -> ไฟล์ -> default.realm

default.realmเป็นไฟล์ที่เราอยู่ที่นี่ ตอนนี้ Save_ เป็นไฟล์นี้ที่ตำแหน่งของคุณและเข้าถึงไฟล์จาก realm_browser และคุณจะได้รับฐานข้อมูลของคุณ

หมายเหตุ: วิธีการดังกล่าวได้รับการทดสอบบนโทรศัพท์ที่ไม่ได้รูท (หนึ่ง + 3)


10

หากคุณใช้ฐานข้อมูลเริ่มต้นในตัวจำลอง:

po Realm().configuration.fileURL

คุณสามารถเพิ่มรายละเอียดได้ไหม?
zeeshan

@zeeshan โปรดหยุดการจำลองในขณะที่ใช้งานอยู่และพิมพ์คำสั่งแล้วกด Enter
superarts.org

9

อัพเดทคำตอบสำหรับอาณาจักรใหม่ล่าสุด:

สำหรับ Android:

ชำระเงิน stetho และhttps://github.com/uPhyca/stetho-realm วิดีโอสอนที่นี่: https://www.youtube.com/watch?v=9pFJz5VexRw

สำหรับ IOS (Swift)

ทั้ง:

debugPrint("Path to realm file: " + realm.configuration.fileURL!.absoluteString)

หรือ

ขั้นที่ 1:มีค่าคงที่ที่เรียกว่า dev อยู่ที่ไหนซักแห่ง สมมติว่าไฟล์คงที่

public class Constants {

    public static var dev: Bool = true

}

ขั้นตอนที่ 2:สร้างคลาสอื่นที่เรียกว่า RealmFunctions.swift

import RealmSwift


func realmAndPath() -> Realm {
    if Constants.dev {
        // location of my desktop
        let testRealmURL = NSURL(fileURLWithPath: "/Users/#####/Desktop/TestRealm.realm")
        return try! Realm(fileURL: testRealmURL)
    } else {
        return try! Realm()
    }
}

ขั้นตอนที่ 3:ในที่สุดในมุมมองควบคุมของคุณ:

let realm = realmAndPath()

ขอบคุณ Stewart Lynch สำหรับคำตอบเดิม


สำหรับ SWIFT 3 ฉันต้องการที่จะเปลี่ยนrealm.pathไปrealm.configuration.fileURL!.absoluteString
แอนดี้

5

หากคุณได้รับข้อผิดพลาดกล่องโต้ตอบ 'ป้อนรหัสเข้ารหัส':

ฉันใช้ Swift 2.1 กับ Realm 0.96.2 และได้รับข้อผิดพลาดนี้เมื่อพยายามเปิดไฟล์ฐานข้อมูล:

ไม่สามารถเปิด 'เริ่มต้น' มันอาจถูกเข้ารหัสหรือไม่ได้อยู่ในรูปแบบไฟล์ที่ใช้งานร่วมกันได้ หากคุณรู้ว่าไฟล์นั้นถูกเข้ารหัสคุณสามารถป้อนรหัสการเข้ารหัสด้วยตนเองเพื่อเปิด

พบว่าการใช้ Realm Browser 0.96 รุ่นก่อนวางจำหน่ายแก้ไขปัญหาได้:

https://github.com/realm/realm-browser-osx/releases/tag/0.96-prerelease


3

ครั้งแรกฉันรับทราบว่านี่เป็นเธรด Android แต่เป็นผลการค้นหาครั้งแรกสำหรับปัญหานี้โดยทั่วไป

ในการเปิดฐานข้อมูล Xcode Simulator Realm ที่สร้างขึ้นล่าสุดในเบราว์เซอร์ Realm คุณสามารถใช้สคริปต์นี้ใน Automator หรือพิมพ์ทั้งหมดที่เทอร์มินัล ด้วยการใช้ Automator ฉันสามารถเข้าถึงอาณาจักรปัจจุบันของฉันได้ในคลิกเดียว

    cd ~/Library/Developer/CoreSimulator/Devices/
    cd `ls -t | head -n 1`/data/Containers/Data/Application
    cd `ls -t | head -n 1`/Documents    
    open -a 'Realm Browser' ./default.realm

ติดตั้ง Realm Browser ใน Automator คลิกใหม่เลือก Run Shell Script วางรหัสเปลี่ยนชื่อ Realm Db คลิก Run เพื่อทดสอบบันทึกไฟล์ที่สะดวกสำหรับการเข้าถึงคลิกด่วน

ฉันไม่รู้ว่าฉันพบเคล็ดลับนี้ครั้งแรกที่ไหน แต่กระทู้นี้เตือนฉันว่าฉันเข้าถึงข้อมูลสดของฉันในอดีตได้อย่างไร


3

เพียงแค่แอพของคุณอยู่ใน iOS Simulator

เข้าสู่

console.log (Realm.defaultPath)

ในรหัสเช่น: App.js


2

ฉันก้าวไปอีกขั้นหนึ่งแล้ว ฉันสร้างไฟล์ swift ที่ชื่อว่าRealmFunctionsและในนั้นฉันได้สร้างฟังก์ชั่นนี้

    import RealmSwift
    func realmAndPath() -> Realm {
        if dev {
            // location of my desktop
            return try! Realm(path: "/Users/slynch/Desktop/TestRealm.realm")
        } else {
            return try! Realm()
        }
    }

ตอนนี้ในตัวควบคุมมุมมองหลักของฉันฉันมีตัวแปรบูลีนระดับโลกที่เรียกว่า dev

var dev: Bool = true // when in development mode
var dev: Bool = false // when I want to run on my device or upload to app stor.

ตอนนี้สิ่งที่ฉันต้องทำในรหัสของฉันคือ

let realm = realmAndPath()

ดังนั้นเมื่ออยู่ในโหมดการพัฒนาฉันสามารถค้นหาฐานข้อมูล realm ของฉันบนเดสก์ท็อปและสามารถเปิดใน Realm Browser


1
ข้อผิดพลาด: (13, 21) เลเบลอาร์กิวเมนต์ '(พา ธ :)' ไม่ตรงกับโอเวอร์โหลดใด ๆ ที่มีอยู่ดูเหมือนว่ามันจะเปลี่ยนไปในเวอร์ชันที่ใหม่กว่า
OWADVL

2

sudo find / -name "*.realm"ผมพบว่าไฟล์ราชอาณาจักรของเราโดยการออกคำสั่งนี้ในเทอร์มิ:

หวังว่านี่จะช่วยได้!



1

ในการรับเส้นทาง DB สำหรับ iOS วิธีที่ง่ายที่สุดคือ:

  1. เปิดแอปของคุณในตัวจำลอง
  2. หยุดชั่วคราวเมื่อใดก็ได้ในตัวดีบัก
  3. ไปที่คอนโซล (ที่คุณมี(lldb)) และพิมพ์:po RLMRealm.defaultRealmPath

ธาดา ... คุณมีเส้นทางไปยังฐานข้อมูลอาณาจักรของคุณ



1

สำหรับผู้ที่ใช้ React Native และใช้ขอบเขตเริ่มต้น:

Realm.defaultPath


ฉันไม่พบสิ่งนี้!
Ali Hesari

@Natividad วางรหัสนี้ไว้ที่ไหน? คำแนะนำในการรับไฟล์ realm?
Bikram Thapa

@AliHesari คุณพบ sth หรือไม่
Bikram Thapa

componentDidMount() { console.log(Realm.defaultPath) }ในส่วนของฉันโดยใช้ Realm ทำงานให้ฉัน ตรวจสอบคอนโซล xcode เพื่อหาเส้นทางในภายหลัง
พอลชอเรย์

0

ภายใต้เครื่องมือ -> การตรวจสอบอุปกรณ์ Android

และภายใต้ File Explorer ค้นหาแอพ และไฟล์นั้นอยู่ภายใต้ data / data


0

คำสั่ง lldb ที่ถูกต้องสำหรับ Xcode 7, Swift 2.2+ คือ po Realm.Configuration.defaultConfiguration.path!


1
สมาชิกไม่ได้โทรpathแต่fileURL: Realm.Configuration.defaultConfiguration.fileURL!
nburk

1
คุณถูกต้อง ... สิ่งนี้เปลี่ยนแปลงใน realm1.0 ... ฉันใช้เวอร์ชัน 0.98 เมื่อฉันตอบคำถามนี้ ... คำตอบที่ถูกต้องคือ po Realm.Configuration.defaultConfiguration.fileURL?.path
Marquis103

0

โซลูชันของ Swift 2.3

วิธีแก้ปัญหาที่ง่ายกว่าที่จะไม่เกิดขึ้นกับการอัพเดตของ Realm

    let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    print("App Path: \(dirPaths)")

ไฟล์. realm ควรอยู่ใน "Documents"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.