2014-11-21 2 views
0

Passbook과 함께 ios 앱을 구현하고 있습니다. 그래서 패스를 생성하는 ASP.net 서버를 구현했습니다. 패스가 서버 측에서 성공적으로 생성되었습니다. 또한 내 Mac에서 pass.pkpass 파일을 두 번 클릭하면 pass viewer가 서버에서 생성 한 패스를 보여줍니다. 하지만 IOS 시뮬레이터로 드래그하려고 할 때 "사파리가이 파일을 다운로드 할 수 없다"고합니다. 나는 인증서를 재생성하여 시도했다. 그러나 아무 것도 효과가 없었습니다.pkpass가 시뮬레이터에 표시되지 않습니다.

여기 내 pass.json 파일

{ 
    "passTypeIdentifier": "<mypassIdenttity>", 
    "formatVersion": 3, 
    "organizationName": "<my organization name>", 
    "serialNumber": "<my serial number>", 
    "teamIdentifier": "<my team identifier>", 
    "description": "123", 
    "foregroundColor": "rgb(255,255,255)", 
    "backgroundColor": "rgb(55,117,50)", 
    "logoText": "Zekes", 
    "barcode": { 
    "message": "123456789", 
    "format": "PKBarcodeFormatPDF417", 
    "messageEncoding": "iso-8859-1" 
    }, 
    "storeCard": { 
    "primaryFields": [ 
    { 
    "key": "balance", 
    "label": "remaining balance", 
    "value": 21.75 
    } 
], 
"auxiliaryFields": [ 
    { 
    "key": "deal", 
    "label": "Deal of the Day", 
    "value": "Lemons" 
    } 
] 
} 
} 

것은 여기 내 manifest.json을

난 내 패스 P12 파일로 인증서 및 P12 파일로의 PrivateKey를 내 보낸
{ 
    "pass.json": "285c63c6580d946eb360e0c6e68d1fa072ea20e9", 
    "logo.png": "25de09e2d3b01ce1fe00c2ca9a90a2be1aaa05cf", 
    "icon.png": "0296b01347b3173e98438a003b0e88986340b2d8", 
    "[email protected]": "5afd9585b08c65fdf105a90c8bd643407cba2787", 
    "strip.png": "736d01f84cb73d06e8a9932e43076d68f19461ff", 
    "[email protected]": "468fa7bc93e6b55342b56fda09bdce7c829d7d46" 
} 

입니다. 내 프로젝트 경로 [서버 구현]에 복사했습니다.

여기 내 매니페스트 및 인증서 파일을 사용하여 내 서명 파일을 생성하는 방법입니다.

static void SignManifest(ZipFile zipFile, byte[] manifestFileData, X509Certificate2 certificate) 
    { 
     var cert = DotNetUtilities.FromX509Certificate(certificate); 

     var privateKey = DotNetUtilities.GetKeyPair(certificate.PrivateKey).Private; 
     var generator = new CmsSignedDataGenerator(); 

     generator.AddSigner(privateKey, cert, CmsSignedDataGenerator.DigestSha1); 

     var certList = new System.Collections.ArrayList(); 
     //////////////////////////////////////////////////////// 
     var a1Cert = new X509Certificate2(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwrd.cer")); 
     // var a2Cert = new X509Certificate2(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AppleIncRootCertificate.cer")); 
     /////////////////////////////////////////////////////////// 
     certList.Add(cert); 
     certList.Add(DotNetUtilities.FromX509Certificate(a1Cert)); 
     //certList.Add(DotNetUtilities.FromX509Certificate(a2Cert)); 

     Org.BouncyCastle.X509.Store.X509CollectionStoreParameters PP = new Org.BouncyCastle.X509.Store.X509CollectionStoreParameters(certList); 
     Org.BouncyCastle.X509.Store.IX509Store st1 = Org.BouncyCastle.X509.Store.X509StoreFactory.Create("CERTIFICATE/COLLECTION", PP); 

     generator.AddCertificates(st1); 

     var content = new CmsProcessableByteArray(manifestFileData); 
     var signedData = generator.Generate(content, false); 

     var data = signedData.GetEncoded(); 

     zipFile.AddEntry("signature", data); 
    } 

성공적으로 pass.pkpass를 생성 할 수 있지만 시뮬레이터에서 실행되지 않는 이유는 무엇입니까? ... 누군가가 이유를 말해 줄 수 있습니까? 진짜로 이틀 동안 여기에 갇혔어요. 제발 도와주세요.

+0

해야 하는가? – PassKit

+0

@PassKit ivent에서 아직로드하지 않으려 고했지만 .. 패스가 시뮬레이터에 드래그 앤 드롭하여로드 할 수 있다는 것을 알고 있습니다. 그래서 지금 콘솔 로그 출력이 없습니다. – Darshana

+0

.pkpass 번들로 드래그 할 때 콘솔을 열 수 있습니다. 그것은 당신에게 무슨 일이 일어나는지에 대한 통찰력을 줄 것입니다. – PassKit

답변

관련 문제