0

私は自分の人生では見つけられないように見える特定の製品ソリューションをグーグルで検索するのにかなりの時間を費やしたので、助けを求めてスタックオーバーフローに来ました。

私は言及されていない公立大学で働いており、新入生の特定のグループが新しいラップトップを購入する必要があり、彼らが持つオプションの 1 つは 13 インチ Macbook Pro の特定の構成です。約 1,800 人の学生が8 月に秋学期が始まる前に、今後数か月にわたってこれらの Macbook を購入します。

私たちが抱えている問題は、Windows でのみ利用可能な特定のソフトウェアを使用する必要があることです。シンプルな .dmg ファイルを実行し、既存のハード ドライブをパーティション分割して、必要なソフトウェアを含む事前構成済みの Windows イメージを Boot Camp にインストールする製品ソリューションを見つけました。この方法では、Boot Camp は少し混乱することがあるため、学生は技術的な知識の範囲外のタスクを実行する必要はありません。

私が探しているソリューションは、次のことを実行するアプリケーションまたはメソッドです。

  1. ファイルがインターネット上のどこにあるかなどの入力を学生が入力することなく、潜在的に大きな .dmg ファイル (40 GB を超える) をダウンロードする
  2. md5 チェックサムによるファイルの検証
  3. 可能であれば、その .dmg ファイルを自動的に実行する

それとも、自分で開発して達成するには Swift/Objective-C の理解が必要ですか?

4

1 に答える 1

3

基本的に、はい、この方法で行うには、Swift / Cocoa フレームワークの言語が少し必要です。Python などの別の言語をいつでも使用して、これを行うこともできます。

  1. ダウンロードファイル。これは、次のような単純なダウンローダー クラスで実行できます。

    class HTTP {
        static func download(download_path: NSURL, save_path: NSURL, completion: ((NSError?, NSData?) -> Void)) {
            let req = NSMutableURLRequest(URL: download_path)
            req.HTTPMethod = "GET"
            NSURLSession.sharedSession().dataTaskWithRequest(req) { data, response, error in
                if error != nil {
                    //Downloading file failed
                    completion(error, nil)
                } else {
                    //Downloaded file
                    do {
                        //Write data to file:
                        if data != nil {
                            try data!.writeToFile(save_path.absoluteString + "file.dmg", options: [])
                            completion(nil, data!)
                        } else {
                            completion(NSError(domain: "Downloaded file null", code: -1, userInfo: nil), nil)
                        }
    
                    } catch {
                        completion(NSError(domain: "Could not write to file", code: -1, userInfo: nil), nil)
                    }
                }
            }.resume()
        }
    }
    
    //Usage: 
    HTTP.download(NSURL(string:"http://www.example.com/file.dmg")!, save_path:  NSURL(string: "/Users/username/Desktop/")!) {
        error, data in
    
        //Check if there's an error or data is null, if not continue to step 2
    }
    
  2. MD5 チェックサムを確認します。CommonCrypto ライブラリを使用して、ファイル データの MD5 を計算します。

    //Usage:
    "contents-of-file".MD5
    
  3. DMGを実行するには、swift からターミナル コマンドを実行する方法と、ターミナルから DMG ファイルを実行する方法を参照してください。または、 Applescript を使用して DMGを実行し、そのスクリプトを swift から呼び出すこともできます。

上記の方法を使用した完全な例:

HTTP.download(NSURL(string:"http://www.example.com/file.dmg")!, save_path: NSURL(string: "/Users/username/Desktop/")!) {
    error, data in
    if error == nil {
        guard data != nil else {
            //Data is nil
        }
        if String(data: data!, encoding: NSUTF8StringEncoding)!.md5() == /* Other MD5 value to check */ {
            //MD5 checksum completed. Use whatever method here to execute the DMG
            executeDMG(NSURL(string: "/Users/username/Desktop/file.dmg")!)
        }

    } else {
        //Couldn't download file
        //Info: error.localizedDescription property
    }
}
于 2016-05-17T22:14:00.837 に答える